为什么两个不同对象的类Test的变量对于==操作给出了true,而对于String对象,同样的操作结果为false?

时间:2017-10-14 19:49:41

标签: java equals-operator

对于两个不同对象的字符串变量的==操作使用new创建的s和p给出结果为false(第1行)我理解但为什么第3行和第4行(注释的行号)给出为输出为真? / p>

我知道==用于参考比较的事实,我怀疑它是否意味着参考比较,那么为什么第4行给出为真,因为j是一个整数, String(String s)和每次必须创建新对象时都没有不变性概念吗?

None

2 个答案:

答案 0 :(得分:1)

在Java中,使用两个整数上的==运算符按值对它们进行比较。同时在两个字符串上使用==或两个类比较它们在内存中的位置,而不是它们的值。 您需要在Test类中小心,因为您将类字段命名为与参数相同的内容,因此您实际上可能不会将j和s的值分配给您认为的是什么。 尝试将构造函数更改为

Test(String str, int i){
    s = str;
    j = i;
}

答案 1 :(得分:1)

字符串通常在java中缓存,因此具有相同值的两个字符串可能具有相同的引用。 (对于整数来说也是如此,如果它们具有相同的值,则某个范围内的对象被引用为同一个对象)。这可能导致在构造函数中使用与t1和t2的s值相同的对象“A”。如果两个int原语具有相同的值,则它们总是相同的。