两个相等的整数用==比较为什么会被判断为不等

FVoid 发布于 2016/10/17 14:35
阅读 1K+
收藏 0
在JAVA中,两个相等的整数用==比较为什么会被判断为不等?求大神解答
加载中
1
s
slswzzw
你用int就一样了 int是基本类型 Integer是对象 两个Integer对象的地址当然不一样,另外int是基本类型直接存的是值,不会指向某个内存地址。看看JVM的基本实现。
FVoid
FVoid
哦哦,后来我也是想通了这一点,谢谢啦
2
猫神
猫神
==是判断内存地址,如果是判断值是否相等的话,用equals
Feng_Yu
Feng_Yu
回复 @世人皆白我独黑 : 关于equals的算法你看JDK源码实现就知道了,其实很简单: http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8-b132/java/lang/Object.java#Object.equals%28java.lang.Object%29
Feng_Yu
Feng_Yu
回复 @世人皆白我独黑 : 谁告诉你相同的int指向同一个地址的?
FVoid
FVoid
恩恩,我换了equals的确能使它相等了,但是我搞不懂的是java不是同一个int会指向同一个地址吗,为什么会导致这种相同的int不是指向同一个地址中的情况呢?会不会跟我使用了数组ArrayList<Integer>有关?
1
panmingguang
panmingguang

引用来自“世人皆白我独黑”的评论

ArrayList<Integer> p=divisor(d);//divisor函数对一个数进行因式分解
ArrayList<Integer> q=divisor(commonDivisor);
ArrayList<Integer> list=new ArrayList<>(); for(int j=0,l=0;j<q.size()&&l<p.size();){ if(p.get(l)==q.get(j)){
        p.remove(l);
        list.add(q.get(j)); continue;
    } if(p.get(l)>q.get(j)){
        j++;
    }else {
        l++;
    }
}


在那个

p.get(l)==q.get(j)

上,谢谢啦

Integer 引用返回的是对接 ,你强转 
(int)p.get(l)==(int)q.get(j)
0
Mx_JHJ
Mx_JHJ
代码呢,我的哥!
0
FVoid
FVoid
ArrayList<Integer> p=divisor(d);//divisor函数对一个数进行因式分解
ArrayList<Integer> q=divisor(commonDivisor);
ArrayList<Integer> list=new ArrayList<>(); for(int j=0,l=0;j<q.size()&&l<p.size();){ if(p.get(l)==q.get(j)){
        p.remove(l);
        list.add(q.get(j)); continue;
    } if(p.get(l)>q.get(j)){
        j++;
    }else {
        l++;
    }
}


在那个

p.get(l)==q.get(j)

上,谢谢啦

liuleidefeng
liuleidefeng
Integer是对象,int 是基本数据类型,这是最根本的问题。对象之间比较只能用equals
0
找-钥-匙
http://www.iteye.com/problems/44798
0
求是科技
求是科技
https://my.oschina.net/u/2312022/blog/754368
0
whatwhowhy
whatwhowhy
int和integer一样吗?
whatwhowhy
whatwhowhy
回复 @世人皆白我独黑 : 所以知道哪出问题了吧
FVoid
FVoid
不一样,int是变量的基本类型,Integer是一个对象
0
kakai
kakai
基本数据类型(byte、char、short、int、long、float、double、boolean)可以用==比较,基本数据类型的包装类型需用equals比较
0
117
117
你把Integer 改成int就可以用==。因为Integer生成的是类实例,不是基本变量。类实例用==就是比较两个实例的内存地址,所以不相等。基本变量可以直接用==比较值
返回顶部
顶部