在Java中声明字符串的两种方式有什么区别?
String se1 = "java";
String se2 = "java";
System.out.println(se1 == se2); // output true
String str1 = new String("OKAY");
String str2 = new String("OKAY");
System.out.println(str1 == str2); // output false
答案 0 :(得分:2)
==
通过引用进行比较。由于称为内化的特征,第一对字符串被认为是相等的。要比较内容相等的字符串,请使用
s1.compareTo(s2) == 0
或
s1.equals(s2)
答案 1 :(得分:2)
只有一个字符串常量实例,例如"ohai"
,因此==
将起作用。
新的String
对象只是新对象,可以从另一个字符串的值创建。
字符串应该几乎总是与.equals
进行比较,例如
str1.equals(str2);
这会比较字符串值,而不是引用。
答案 2 :(得分:1)
在第一种情况下,您已将 se1 和 se2 声明为字符串文字。因此,您可以使用 == 运算符来比较两个字符串。
但在后来的情况下, str1 和 str2 是字符串对象,因此通过==运算符的计算失败。要比较两个对象,您应该使用等于方法。
答案 3 :(得分:1)
在比较包含字符串的对象时,不应使用==
。通常==
会比较引用,因此它仅返回相同对象的true
。您应该使用equals()
方法:str1.equals(str2)
在第一种情况下偶尔会对你有用,因为java会缓存字符串常量,所以"java"
在两种情况下都由相同的String实例表示。