For ==对两个不同的对象s和p的变量使用new创建的结果作为false(行1),我知道但为什么行3和4(行号注释)给出true作为输出?为什么类Test的两个不同对象的变量为==操作赋予true,并且对于String对象而言,相同的操作会导致为false?
我知道这个事实,==是用于参考比较,这是我的疑问,如果它是为了参考比较,那么为什么第4行给出真正的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;
}
}
“*为什么第3行和第4行给出正确,因为t1和t2是不同的对象*” - “t1”和“t2”是不同的对象,但您不在第3行比较它们。他们持有的琴弦,它们不是不同的物体。你有两个引用相同的字符串文字'“A”',这与你在's'和'p'做的显式创建新的'String'对象时有很大的不同。 – azurefrog