programing

어떻게“a <= b && b <= a && a! = b”가 참일 수 있습니까?

procenter 2021. 1. 17. 12:08
반응형

어떻게“a <= b && b <= a && a! = b”가 참일 수 있습니까?


이것이 어떻게 가능한지 알아내는 코드입니다. 단서가 있지만 어떻게해야할지 모르겠습니다. 음수와 양수, 그리고 아마도 변수 수정 자에 관한 것이라고 생각합니다. 나는 초보자이며 모든 곳에서 해결책을 찾았지만 사용할 수있는 것을 찾을 수 없었습니다.

문제는 두 변수를 선언하고 초기화해야한다는 것입니다. if 조건은 참이어야합니다.

코드:

if( a <= b && b <= a && a!=b){
       System.out.println("anything...");
}

시간을 내 주셔서 감사합니다.


기본 유형에서는 불가능합니다. boxed Integers로 얻을 수 있습니다.

Integer a = new Integer(1);
Integer b = new Integer(1);

<=>=(가) 동안 비교는 언 박싱 값 1을 사용합니다 !=참조를 비교하고 서로 다른 객체이기 때문에 성공합니다.


이것도 작동합니다.

Integer a = 128, b = 128;

이것은하지 않습니다 :

Integer a = 127, b = 127;

자동 복싱 an intInteger.valueOf(int). 이 함수는 128보다 작은 값에 대해 캐시를 사용합니다. 따라서 128을 할당하면 캐시 적중이 없습니다. Integer각 자동 박싱 작업 으로 새 인스턴스를 만들고 a != b(참조 비교)가 참입니다.

127의 할당에는 캐시 적중이 있으며 결과 Integer개체는 실제로 캐시의 동일한 인스턴스입니다. 따라서 참조 비교 a != b는 거짓입니다.


클래스 변수 또 드문 경우는 다른 스레드의 값을 변경할 수있을 수 ab의 비교가 실행된다.

참조 URL : https://stackoverflow.com/questions/19042393/how-can-abbaab-be-true

반응형