为什么 class 测试两个不同对象的变量对 == 操作给出 true 而对字符串对象相同的操作结果为 false?
Why does variables of class Test for two different objects gives true for == operation and same operation results in false for String Objects?
对于使用 new 创建的两个不同对象 s 和 p 的 String 变量的 == 操作给出的结果为 false(第 1 行),我理解但为什么第 3 行和第 4 行(行号注释)给出 true 作为输出?
我知道 == 用于参考比较,这就是我怀疑它是否用于参考比较的地方,那么为什么第 4 行给出 true,因为 j 是一个整数并且没有不变性概念,因为对于 String ( String s ) 并且每次都必须创建一个新对象?
class World
{
public static void main(String[] args)
{
String s=new String("B");
String p=new String("B");
System.out.println(s==p); //false line 1
Test t1= new Test("A",4);
Test t2= new Test("A",4);
System.out.println(t1==t2); //false line 2
System.out.println(t1.s==t2.s); //true line 3
System.out.println(t1.j==t2.j); //true line 4
}
}
class Test
{
String s;
int j;
Test(String s, int j)
{
this.s=s;
this.j=j;
}
}
在 Java 中,对两个整数使用 ==
运算符按值比较它们。同时在两个字符串或两个 class 上使用 ==
比较它们在内存中的位置,而不是它们的值。
您在测试 class 中需要小心,因为您将 class 字段命名为与您的参数相同的名称,因此您实际上可能不会将 j 和 s 的值分配给您认为的值。
尝试将构造函数更改为
Test(String str, int i){
s = str;
j = i;
}
字符串通常缓存在java中,因此具有相同值的两个字符串可能具有相同的引用。 (整数也是如此,如果它们具有相同的值,则一定范围内的对象被引用为相同的对象)。这可能导致构造函数中 t1 和 t2 的对象 "A" 与 s 的值相同。如果两个 int 原语具有相同的值,则它们始终相同。
对于使用 new 创建的两个不同对象 s 和 p 的 String 变量的 == 操作给出的结果为 false(第 1 行),我理解但为什么第 3 行和第 4 行(行号注释)给出 true 作为输出?
我知道 == 用于参考比较,这就是我怀疑它是否用于参考比较的地方,那么为什么第 4 行给出 true,因为 j 是一个整数并且没有不变性概念,因为对于 String ( String s ) 并且每次都必须创建一个新对象?
class World
{
public static void main(String[] args)
{
String s=new String("B");
String p=new String("B");
System.out.println(s==p); //false line 1
Test t1= new Test("A",4);
Test t2= new Test("A",4);
System.out.println(t1==t2); //false line 2
System.out.println(t1.s==t2.s); //true line 3
System.out.println(t1.j==t2.j); //true line 4
}
}
class Test
{
String s;
int j;
Test(String s, int j)
{
this.s=s;
this.j=j;
}
}
在 Java 中,对两个整数使用 ==
运算符按值比较它们。同时在两个字符串或两个 class 上使用 ==
比较它们在内存中的位置,而不是它们的值。
您在测试 class 中需要小心,因为您将 class 字段命名为与您的参数相同的名称,因此您实际上可能不会将 j 和 s 的值分配给您认为的值。
尝试将构造函数更改为
Test(String str, int i){
s = str;
j = i;
}
字符串通常缓存在java中,因此具有相同值的两个字符串可能具有相同的引用。 (整数也是如此,如果它们具有相同的值,则一定范围内的对象被引用为相同的对象)。这可能导致构造函数中 t1 和 t2 的对象 "A" 与 s 的值相同。如果两个 int 原语具有相同的值,则它们始终相同。