2014-03-19 3 views
0

그래서 리뷰를하고 있었고이 질문에 대해 잘 모르겠습니다. 이 코드는 true로 평가 할 다음과 같은 표현하는, 실행 된 후배열의 코드 세그먼트 java

int[] A = {1,2,3}; 

int[] B = {1,2,3}; 

int[] C = A; 

:

는 다음 코드 세그먼트를 고려?

I. A.equals (B) 

II. A == B 

III. A ==C 

는 난 단지

II에만

III는

I과 III는

나는, II, 그리고 III

나는, 그것은 단지 I이었다 생각 그러나 나의 급우 중 한 명이 그것이 III이었다고 말했다.

일부 설명해 주시겠습니까?

도움 주셔서 감사합니다.

+3

쉽게 테스트 할 수 있습니다. – Maroun

+0

예 귀하의 친구가 맞다고 생각합니다. 자세한 내용은이 질문을 참조하십시오. http://stackoverflow.com/questions/8777257/equals-vs-arrays-equals-in-java – JLewkovich

+1

Java 변수에 소문자 이름을 사용하십시오. – Renato

답변

1

대답은 @JL에 의해 위의 링크 된 질문입니다 :

를 Arrays.equals (배열 1, 배열 2) 사용자가 예상하는대로 작동 array1.equals (배열 2)가 다시 하강 (즉 내용을 비교) to Object.equals 구현은 차례대로 신원을 비교하므로 더 나은 은 ==로 대체됩니다 (순수 주의자 용 : 예, null에 대해 알고 있습니다).

간단히 말해 C를 A와 같게 설정 했으므로 A == C가 참입니다. 본질적으로 Object.equals을 수행 중입니다. 표면에 A.equals(B)이 사실 인 것처럼 보이지만, 이는 Object.equals 뒤에있는 내부 때문이 아닙니다.

친구가 옳습니다.

1

세 번째는 a와 c가 같은 개체를 가리키고 있습니다. 다른 사람들은 그렇지 않습니다.

1

친구가 맞습니다. 코드에서

당신은 그들이 동일해야하지만, 그들은 같은 객체없는이 C는 똑같은 A와 객체 다른 경우

것을 의미 C = A.

말을하는거야 함유량.

당신은 true를 반환를 Arrays.deepEquals에서보기를 할 수 있습니다 (코드 약간 수정) :

패키지 어레이;

import java.util.배열;

public class ArraysTest { 
    public static void main(String[] args) { 
     Integer[] A = { 1, 2, 3 }; 
     Integer[] B = { 1, 2, 3 }; 
     Integer[] C = A; 
     System.out.println("A.equals(B) is " + (A.equals(B))); 
     System.out.println("Arrays.deepEquals(A, B) is " 
    + (Arrays.deepEquals(A, B))); 
     System.out.println("A == B is " + (A == B)); 
     System.out.println("A == C is " + (A == C)); 
    } 
} 

출력은 다음과 같습니다

A.equals(B) is false 
Arrays.deepEquals(a, b) is true 
A == B is false 
A == C is true 
1

에만 세번째 하나에 해당 될 것입니다. (1) 위치 : 1 : 2, 위치 2

는 제

int[] A = {1,2,3}; 

마녀가 위치 0을 취했음을 의미 3. (1) 위치 : 1 : 2, 위치 2

후 제

int[] B = {1,2,3}; 

마녀 취할 B가 위치 0을 갖는 수단 (3).

는 그래서 그들은 각각의 위치에서 같은 값을 가지고 있지만 그들은 두 개의 서로 다른 INT 배열

하지만 가지고있는 세 번째

int[] C = A; 

당신이 INT [] C는 [int로 같다`말하는 그 ] A,

단지에, 또한

String a = "LOL"; 
String b = a; 

몇 가지 사항을 말씀처럼 문자열을 .equals을 사용하여 비교하면 다른 것은 ==을 사용하여 비교되며 항상 변수에 소문자를 사용하므로 코드 작성이 쉬워집니다.

당신은 항상이 누가 도움

if(A == B) 
{ 
    System.out.println("A == B is true"); 
} 
else 
{ 
    System.out.println("A == B is false"); 
} 

희망이

if(A.equals(B) 
{ 
    System.out.println("A.equals(B) is true"); 
} 
else 
{ 
    System.out.println("A.equals(B) is false"; 
} 

같은과 방법을 테스트 할 수 있습니다.