면책조항: 이 글은 해당 블로거의 글을 재인쇄한 것입니다. 원본 주소는 글 끝에 있습니다.
/*
* int는 java에서 제공하는 8가지 기본 데이터 유형 중 하나입니다. Java는 각 기본 유형에 대한 래퍼 클래스를 제공합니다. Integer는 int에 대해 Java에서 제공하는 래퍼 클래스입니다. int의 기본값은 0,
*이고 Integer의 기본값은 null
* 즉, Integer는 할당되지 않은 값과 0의 값을 구분할 수 있지만 int는 할당되지 않은 상황을 표현할 수 없습니다. 예를 들어 시험에 응시하지 않은 것과 시험 점수가 0점인 것의 차이를 표현하려면
* , Integer
* 만 사용할 수 있습니다. JSP 개발에서는 Integer의 기본값이 null이므로 el 표현식을 사용하여 텍스트 상자에 표시하면 값이 빈 문자열이고 int의 기본값은 0이므로 el 표현식을 사용하면 텍스트 상자에 표시하려면
* 결과가 0이므로 int는 웹 레이어의 양식 데이터 유형으로 적합하지 않습니다.
* Hibernate에서 OID가 Integer 타입으로 정의된 경우, Hibernate는 객체의 값이 null인지 여부에 따라 객체가 임시인지 여부를 결정할 수 있습니다.
* * OID가 int 타입으로 정의된 경우, 해당 객체를 설정해야 합니다. hbm 매핑 파일에서 저장되지 않은 값 속성을 0으로 설정합니다.
* 또한 Integer는 문자열을 정수로 변환하는 등 다양한 정수 관련 연산 방법을 제공합니다. Integer는 정수의 최대값과 최소값을 나타내는 상수도 정의합니다.
*/
1
2
3 | System.out.println(Integer.valueOf(
"127" )==Integer.valueOf (
System.out.println(Integer.valueOf( "128" )==Integer.valueOf( "128" ));
System.out.println(Integer.parseInt( "128" )==Integer.valueOf( "128" ));
System. out.println(Integer.valueOf( "128" )==Integer.valueOf( "128" ));
|
첫 번째 판단은 true
를 반환하고 두 번째 판단은 false
를 반환하는 이유는 무엇입니까? 127
및 128
내가 모르는 차이점이 있나요? (물론127
미만128
...)
true
而第二个判断返回了false
?127
和128
有什么我不知道的区别吗?(当然除了127
小于128
…)还有,为什么第三个判断返回了true
?
我看了另一个相关提问的回答,但是我还是不知道它们什么时候返回true还有为什么第二个判断返回false
。
回答#1:
Integer.valueOf(String)
确有一个不同寻常的行为。
valueOf
会返回一个Integer
(整型)对象,当被处理的字符串在-128
和127
(包含边界)之间时,返回的对象是预先缓存的。这就是为什么第一行的调用会返回true
-127
这个整型对象是被缓存的(所以两次valueOf
返回的是同一个对象)——第二行的调用返回false
是因为128
没有被缓存,所以每次调用,都会生成一个新的整型对象,
因此两个128
整型对象是不同的对象。
重要的是你要知道在上面的比较中,你实际进行比较的是integer.valueOf
返回的对象引用,所以当你比较缓存外的整型对象时,相等的判断不会返回true
,就算你
传个valueOf
的值是相等的也没用。(就像第二行中Integer.valueOf(128)==Integer.valueOf(128))
。想让这个判断返回true
,你需要使用equals()
方法。
parseInt()
返回的不是整型对象,而是一个int
型基础元素。这就是为什么最后一个判断会返回true
,第三行的判断中,在判断相等时,实际比较的是128 == 128
,
所以它必然是相等的。
再来说说第三种比较中的一点区别,使得它的结果与第二种比较不一样了:
一个unboxing conversion(一种比较时的转换,把对对象的引用转换为其对应的原子类型)在第三行的比较中发生了。因为比较操作符使用了==
同时等号的两边
存在一个int
型和一个Integer
对象的引用。这样的话,等号右边返回的Integer
对象被进一步转换成了int
数值,才与左边进行相等判断。
所以在转换完成后,你实际比较的是两个原子整型数值。这种转换正是你在比较两个原子类型时所期待看到的那样,所以你最终比较了128
等于128
。
回答#2:
Integer
类有一个静态缓存,存储了256个特殊的Integer
对象——每个对象分别对应`-128 和127之间的一个值。
有了这个概念,就可以知道上面三行代码之间的区别。
1 |
new Integer(123); 그리고 왜 세 번째 판단은 true 를 반환합니까? >? 다른 관련 질문에 대한 답변을 읽었지만 언제 그것이 참인지, 왜 두 번째 판단이 false 를 반환하는지 모르겠습니다. 답변 #1:
이 정수 객체가 캐시된 이유입니다(그래서 따라서 두 개의 중요 위의 비교에서 실제로 비교하는 내용은 값이 동일한 경우
두 번째 비교와 결과가 달라지는 세 번째 비교의 약간의 차이점에 대해 이야기해 보겠습니다. 세 번째 줄의 비교 중에 언박싱 변환(객체에 대한 참조를 해당 원자 유형으로 변환하는 비교 변환)이 발생합니다. 비교 연산자는
따라서 변환이 완료된 후 실제로 두 원자 정수 값을 비교하게 됩니다. 이 변환은 두 원자 유형을 비교할 때 예상할 수 있는 것과 정확히 같으므로
답변 #2:
显示创建了一个 새로운
|
위 내용은 정수와 정수의 차이점과 정수.값() 메소드에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!