-6

可能重复:
关于 Java 字符串池的问题

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
4

4 回答 4

2

==在对象上通过引用进行比较。由于称为内部化的功能,第一对字符串被认为是相等的。要比较字符串的内容相等性,请使用

s1.compareTo(s2) == 0

或者

s1.equals(s2)
于 2013-02-03T17:34:09.687 回答
2

字符串常量只有一个实例,例如"ohai",所以==会起作用。

String对象就是新对象,它可以从另一个字符串的值创建。

字符串几乎总是应该与 进行比较.equals,例如

str1.equals(str2);

这比较字符串,而不是引用。

于 2013-02-03T17:34:23.483 回答
1

在第一种情况下,您已将se1se2声明为String literals。因此,您可以使用==运算符来比较两个Strings

但在后来的情况下, str1str2String 对象,因此通过 == 运算符进行比较失败。要比较两个对象,您应该使用equals方法。

于 2013-02-03T17:35:11.283 回答
1

==比较对象(包括字符串)时不应使用。通常==比较引用,所以它只返回true相同的对象。您应该改用equals()方法:str1.equals(str2)

它有时在第一种情况下对您有用,因为 java 缓存字符串常量,因此"java"在这两种情况下都由相同的 String 实例表示。

于 2013-02-03T17:36:01.043 回答