Java中String ID的含义是什么?

时间:2012-11-05 13:01:28

标签: java string

  

可能重复:
  why equals() method when we have == operator?

当我尝试用Java执行代码时,它给了我2个不同的输出

String txt1="Hello";
String txt2="Hello";
System.out.println((boolean)txt1==txt2);

String txt1=new String("Hello");
String txt2=new String("Hello");
System.out.println((boolean)txt1==txt2);

5 个答案:

答案 0 :(得分:8)

字符串是对象。 ==比较对象引用,而不是字符串的内容。为此,请使用String#equals方法。

在第一个示例中,txt1txt2是指向相同 String对象的两个变量。所以他们彼此==

在第二个示例中,txt1txt2指向两个不同的 String对象(具有相同的字符序列),因此它们是彼此不是==


另外:写new String("string literal")几乎没有任何意义。如果你不明确地知道一个真正的,非常好的理由去做,不要。只有几个非常非常非常的异常情况,你可能会这样做,这与与低级别的东西进行交互有关。不是普通的可移植Java代码。

偶尔会使用new String(String)(不是字符串 literal ,而是来自其他地方的实例,例如substring )。有关详情,请参阅this article(感谢Rp-)。

答案 1 :(得分:3)

==运算符将检查引用相等性,即如果两个参数true是同一个实例,则返回String

每当一个String文字(例如"Hello")出现在一个类中时,String实例就是实习(存储在内部缓存中的那种,所以它可以重复使用)。

执行String txt1="Hello"后,txt1将与实习String完全相同。所以,

String txt1="Hello";
String txt2="Hello";

txt1txt2中的结果是同一个实例,即实习结果。

当你正在进行String txt1=new String("Hello")时,它正在调用带有实例的String构造函数作为参数(一种复制构造函数)。因此,txt1将是 String实例,其持有与实例化实例相同的值,==运算符将返回false。< / p>

有关该主题的更多信息,请参阅JLS的3.10.5. String Literals部分。

  

字符串文字是对String类实例的引用   (§4.3.1,§4.3.3)。

     

此外,字符串文字总是指同一个类的实例   串。这是因为字符串文字 - 或者更一般地说是字符串   这是常量表达式的值(§15.28) - 是“实习”   以便使用String.intern方法共享唯一的实例。

以下问题的答案解释When are Java Strings interned?。以下链接详细说明了主题:String Equality and Interning

作为旁注,请记住使用equals()以便根据其内容执行字符串比较。

答案 2 :(得分:2)

Java尽可能尝试将字符串“共享”到安全空间。

String txt1="Hello";
String txt2="Hello";

是对同一个Object(“Hello”)

的两个引用
String txt1=new String("Hello");
String txt2=new String("Hello");

是对两个不同实例的两个引用,每个实例都是由副本初始化的。

如果比较字符串,请始终使用“equals()”,否则很难预测结果。

答案 3 :(得分:0)

如果您想比较参考文献,请使用==运算符。

如果要比较两个字符串的内容,请使用equals方法。

答案 4 :(得分:0)

这样做

String txt1="Hello";
String txt2="Hello";
System.out.println(txt1.hashCode());
System.out.println(txt2.hashCode());
System.out.println((boolean)txt1==txt2);


String txt1=new String("Hello");
String txt2=new String("Hello");
System.out.println(txt1.hashCode());
System.out.println(txt2.hashCode());
System.out.println((boolean)txt1==txt2);

你可以了解java内部的处理方式。