Java 字符串比较取决于对象初始化
Java String comparision depending on object initialisation
以下代码:
String a = new String("aaa");
String a2 = new String("aaa");
System.out.println(a == a2);
String b = "bbb";
String b2 = "bbb";
System.out.println(b == b2);
产生以下输出:
false
true
为什么比较 a==a2 和 b==b2 的输出因字符串创建类型而异?
当您声明 a
和 a2
时,您明确地创建了新的(不同的)String
。使用构造函数会导致创建一个副本。因此 ==
失败,因为 a
和 a2
指向不同的值。
当您声明 b
和 b2
时,b2
可以重新使用池中的相同字符串。因此它们实际上指向相同的值 ==
returns true
.
查看 here or here 以获得详细答案。
以下代码:
String a = new String("aaa");
String a2 = new String("aaa");
System.out.println(a == a2);
String b = "bbb";
String b2 = "bbb";
System.out.println(b == b2);
产生以下输出:
false
true
为什么比较 a==a2 和 b==b2 的输出因字符串创建类型而异?
当您声明 a
和 a2
时,您明确地创建了新的(不同的)String
。使用构造函数会导致创建一个副本。因此 ==
失败,因为 a
和 a2
指向不同的值。
当您声明 b
和 b2
时,b2
可以重新使用池中的相同字符串。因此它们实际上指向相同的值 ==
returns true
.
查看 here or here 以获得详细答案。