我有这个代码,为什么bo3 = st1 == st2给出了真的?
不是它们在记忆中处于不同的位置,而是通过==我们比较位置是否 它是一样的与否!
如果出现问题,请指出我。谢谢你们。
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");
}
答案 0 :(得分:0)
==
的这种行为有点巧合,因为您使用"test"
创建了字符串。许多带字符串的==
行为都是特定于实现的。只保证equals()
能够比较字符串值。
比较字符串时,总是尽可能使用equals()
,因为字符串 NOT 保证被实习。当您使用这样的文字时,编译器会将字符串放入字符串池中,并使代码中的所有相同文字字符串指向同一个String对象。
当您使用串联或构造函数创建字符串时,同样不一定如此:
String test="test";
String test2=new String("test");
String t="te";
String s="st"
String test3=t+s;
无法保证test==test2
或test2==test3
,但equals()
仍然可以。{/ p>
答案 1 :(得分:0)
st1 == st2为true,因为它们都引用相同的String对象。
这篇文章应该有所帮助:http://www.javaranch.com/journal/200409/ScjpTipLine-StringsLiterally.html