当前位置:编程学习 > JAVA >>

关于INTEGER的神奇问题.牛人请进

整个逻辑说起来有点复杂我就不赘述我只举一个简单的例子 ..
现在又2个 变量 Integer it1 = 1.Integer it2 = 1. 这2个变量的值是从数据库里的2张表里面取出来的..用的数据库是sqlserver2008 持久层是 hibernate.
 然后 if(it1==it2){
         成功;
          }
首先值都是一样的. 然后连接远程数据库的时候 判断永远不成功.连本地数据库的时候判断会成功.这点最让我费解.解决的办法是都转成int用==比较..
真心觉得严谨很重要.
--------------------编程问答-------------------- Integer是个引用类型,不能用==做对比判断。 --------------------编程问答-------------------- 沙发拿了.坐等大神. 
我很想知道 本地连接数据库很远程连数据库难道复制方式会不同?
也就是说 本地连接数据库给Integer it1 = 1;的赋值方式是这样.远程连接数据库给是
Integer it1 =new Integer(1);
难道是这个原因? --------------------编程问答--------------------
引用 1 楼 luojunqian19841124 的回复:
Integer是个引用类型,不能用==做对比判断。

我知道但是我本地调试的时候是可以的我就没太在意这个细节就直接传到服务器上了.然后问题就出现了. --------------------编程问答--------------------
引用 2 楼 Mynoobs 的回复:
沙发拿了.坐等大神. 
我很想知道 本地连接数据库很远程连数据库难道复制方式会不同?
也就是说 本地连接数据库给Integer it1 = 1;的赋值方式是这样.远程连接数据库给是
Integer it1 =new Integer(1);
难道是这个原因?

你猜对了,加十分 --------------------编程问答-------------------- 一个是引用类型 一个是值类型
Integer属于引用类型 比较的时候比较内存地址
int 属于值类型  比较的时候比较值
虽然他们值是一样的  但引用的内存地址不一样 --------------------编程问答--------------------
引用 2 楼 Mynoobs 的回复:
沙发拿了.坐等大神. 
我很想知道 本地连接数据库很远程连数据库难道复制方式会不同?
也就是说 本地连接数据库给Integer it1 = 1;的赋值方式是这样.远程连接数据库给是
Integer it1 =new Integer(1);
难道是这个原因?


Integer 内部会缓存-128到127的对象,这个区间内如果不new就会使用缓存对象,但是new了就不==了。
--------------------编程问答-------------------- Integer是引用类型。Integer it1 = 1.Integer it2 = 1.it1和it2现在是两个对象,你用==去判断他们是否相等永远都不会成功,要么你把他们转换喂int再比较,要么是有equalse去比较。 --------------------编程问答-------------------- 真心不敢相信会有这样的事!!!! --------------------编程问答--------------------
引用 1 楼 luojunqian19841124 的回复:
Integer是个引用类型,不能用==做对比判断。

错了,当Integer类型数据值在[-128,127]这个范围时可以直接用==比较,超过这个范围就得不到正确的答案了,建议最好使用equals --------------------编程问答-------------------- 用“==”肯定是有问题的。。

不过学到一个新的:
当Integer类型数据值在[-128,127]这个范围时可以直接用==比较 --------------------编程问答-------------------- http://www.ticmy.com/?p=110
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,