Java 比较两个字符串可以得到true
我有这个代码,为什么bo3=st1==st2给出true 它们在内存中不是处于不同的位置吗 不管是不是一样 如果有什么问题,请告诉我。谢谢你们Java 比较两个字符串可以得到true,java,string,Java,String,我有这个代码,为什么bo3=st1==st2给出true 它们在内存中不是处于不同的位置吗 不管是不是一样 如果有什么问题,请告诉我。谢谢你们 public static void main(String[] args) { String st1 = "HELLO"; String st2 = "HELLO"; String st3 = "hello"; int comp1 = st1.compareTo(st2); // equal 0 int
public static void main(String[] args) {
String st1 = "HELLO";
String st2 = "HELLO";
String st3 = "hello";
int comp1 = st1.compareTo(st2); // equal 0
int comp2 = st1.compareTo(st3); // -32
boolean bo1 = st1.equals(st2); //true
boolean bo2 = st1.equals(st3); // false , if ignoreCase will be true
boolean bo3 = st1==st2; //true ??????????? should not be true
boolean bo4 = st1 == st3; //false
int ind1 = st1.indexOf("L"); // 2
int ind2 = st1.lastIndexOf("L"); // 3
boolean con = st1.contains("LLO"); //true
System.out.println(bo3);
}
当我输入“Mary”时,我有另一个代码,结果是:
同名不相等
public static void main(String [] args) {
Scanner keyboard = new Scanner(System.in);
System.out.print("What is your name? ");
String name = keyboard.next();
if (name.equals("Mary"))
System.out.print("Same name");
else
System.out.print("Different name");
if (name == "Mary")
System.out.println("equal");
else
System.out.println("not equal");
}
==
的这种行为有点巧合,因为您使用“test”
创建了字符串。许多带有字符串的=
行为都是特定于实现的。只有equals()
才能保证用于比较字符串值
在比较字符串时,请尽可能使用equals()
,因为字符串不能保证被插入。当您使用这些文本时,编译器将字符串放入字符串池,并使代码中的所有相同文本字符串指向相同的字符串对象
使用串联或构造函数创建字符串时,不一定是这样:
String test="test";
String test2=new String("test");
String t="te";
String s="st"
String test3=t+s;
无法保证
test==test2
或test2==test3
,但是使用equals()
它仍然是真的。st1==st2是真的,因为它们都引用相同的字符串对象
这篇文章应该会有所帮助:Java将字符串添加到字符串池以减少内存使用,因此第一个示例中的st1和st2将指向相同的内存位置。