public class ByteArr {
public static void main(String[] args){
Byte[] a = {(byte)0x03, (byte)0x00, (byte)0x00, (byte)0x00};
Byte[] b = {(byte)0x03, (byte)0x00, (byte)0x00, (byte)0x00};
byte[] aa = {(byte)0x03, (byte)0x00, (byte)0x00, (byte)0x00};
byte[] bb = {(byte)0x03, (byte)0x00, (byte)0x00, (byte)0x00};
System.out.println(a);
System.out.println(b);
System.out.println(a == b);
System.out.println(a.equals(b));
System.out.println(aa);
System.out.println(bb);
System.out.println(aa == bb);
System.out.println(aa.equals(bb));
}
}
왜 그들 모두가 거짓으로 인쇄하는지 모르겠습니다.
“java ByteArray”를 실행하면 대답은 “false false false false”입니다.
나는 a []가 b []와 같다고 생각하지만 JVM은 내가 틀렸다고 말하고 있는데, 왜 ??
답변
Arrays.equals()
기본 유형 값 (예 : 바이트)을 포함하는 배열의 실제 내용을 비교하려는 경우 사용하십시오 .
System.out.println(Arrays.equals(aa, bb));
Arrays.deepEquals
객체를 포함하는 배열의 비교에 사용 합니다.
답변
왜냐하면 그것들이 같지 않기 때문입니다. 즉, 내부에 동일한 요소가있는 다른 배열입니다.
Arrays.equals()
또는을 사용해보십시오 Arrays.deepEquals()
.
답변
byte []는 변경 가능하므로 .equals()
동일한 객체 인 경우 에만있는 것으로 처리됩니다 .
사용해야 할 내용을 비교하고 싶다면 Arrays.equals(a, b)
BTW : 제가 디자인하는 방식이 아닙니다. 😉
답변
답변
배열을 일반 HashMap 키로 사용하려는 경우 작동하지 않습니다. 배열을 보유하고 equals(...)
및 hashcode(...)
메소드가 java.util.Arrays 메소드의 결과를 리턴 하는 사용자 정의 랩퍼 오브젝트를 작성하는 것을 고려하십시오 . 예를 들면 …
import java.util.Arrays;
public class MyByteArray {
private byte[] data;
// ... constructors, getters methods, setter methods, etc...
@Override
public int hashCode() {
return Arrays.hashCode(data);
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
MyByteArray other = (MyByteArray) obj;
if (!Arrays.equals(data, other.data))
return false;
return true;
}
}
이 래퍼 클래스의 개체는 키로 잘 작동 HashMap<MyByteArray, OtherType>
하며 equals(...)
및 hashCode(...)
메서드 를 깔끔하게 사용할 수 있습니다.
답변
값 평등이 아닌 객체 ID를 테스트하기 때문에 거짓을 반환합니다. 배열이 실제로 메모리에서 다른 객체이기 때문에 false를 반환합니다.
값이 같은지 테스트하려면 java.util.Arrays 의 편리한 비교 함수를 사용해야합니다.
예 :
import java.util.Arrays;
'''''
Arrays.equals(a,b);