두 개의 다른 객체 s와 p에 대해 String의 변수에 대한 연산은 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;
}
}
"t1과 t2가 서로 다른 객체이므로 3 행과 4 행이 서로 다른 이유는 무엇입니까?"- t1과 t2는 서로 다른 객체이지만 3 행에서 비교하지 않습니다. 서로 다른 객체가 아닌 문자열입니다. 같은 문자열 리터럴 인''A ''에 대한 두 개의 참조가 있습니다. 이것은 새로운'String' 객체를 명시 적으로 생성 한's'와'p'를 사용했을 때와 매우 다릅니다. – azurefrog