首页 > 编程知识 正文

Java Integer值范围问题,解三角形范围问题

时间:2023-05-04 12:16:49 阅读:186469 作者:2163

资料来源: http://hi.Baidu.com/eduask/blog/item/227 BF 4d 81 c 71 ebf 538012 f 53.html

package com.test;

公共类测试{

publicstaticvoidmain (string [ ] args ) {

Integer a=100; //如果在这里使用new,则==的值一定为false

Integer b=100;

system.out.println(a==b ); //true

Integer c=150;

Integer d=150;

system.out.println(c==d ); //false

() ) ) ) )。

() ) ) ) )。

打印结果很明显。

但是,如果改为128 var=-128以外的整数,则为false。

这是什么原因?

1。 java在编译时Integer a=100; 翻译为-integera=integer.valueof(100 );

2。 比较时仍然是对象的比较

3。 在jdk源代码中

请参阅。 请参阅。 请参阅。

publicstaticintegervalueof{

final int offset=128;

if(I=-128I=127 ) ) { //must cache

returnintegercache.cache [ I offset ]; 符合//值的范围时,进入制作的静态IntergerCache,i offset的值表示去取cache数组中其下标的值

() ) ) ) )。

returnnewinteger(I; 不属于-128 127的值范围时。 请记住: new,开拓新的内存区域。 不属于智能缓存管理区域

() ) ) ) )。

请参阅。 请参阅。 请参阅。

而且,那是

请参阅。 请参阅。 请参阅。

privatestaticclassintegercache {

私有积分缓存

saticfinalintegercache [ ]=new integer [-128 ] 1271; 开辟-128到127的内存区域。 有0的位置哦

静态{

for(intI=0; i cache.length; I )

che[I]=newinteger(I-128; //为内存区域数组逐个对象赋值

() ) ) ) )。

() ) ) ) )。

请参阅。 请参阅。 请参阅。

这是java为了提高效率,初始化了-128--127之间的整数对象

所以赋值在这个范围内都是同样的对象。

再加一个

Integer a=100;

a;

//这位a是新创建的对手,不是以前的对手。

publicstaticvoidmain (string [ ] args ) {

Integer a=100;

Integer b=a; //此时,作为b指针指示值为100的堆地址的a的堆地址,a==b成立

a; //此时,a指向的值变为101,a指针指向101的堆地址。 baxdjj指着100

system.out.println(a==b );

() ) ) ) )。

打印为假

虽然127--128没有什么关系,但是在这个范围之外会影响性能吧。 就像StringBuffer VS String

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。