java中的int和Integer的问题

Stringstr1="abc";Stringstr2=newString("abc");if(Str1==str2)显示为false而如下语句:inti=3;Integ... String str1="abc";
String str2=new String("abc");
if (Str1==str2) 显示为false
而如下语句:
int i=3;
Integer j=new Integer(3);
if (i==j)显示为true
这是为什么?请给解释一下。谢谢
展开
 我来答
余大侠钓鱼
2011-10-11 · TA获得超过149个赞
知道答主
回答量:78
采纳率:0%
帮助的人:84万
展开全部
str1是在常量区生成了一个abc的字符串,并且str1指向它。而str2是在堆内存里new了一个String类的实例,值为abc,如果是str1.equals(str2);这个时候才为true,而str1==str2这个表达式是全等的意思,它们的值不仅要相等,引用也得一样,也就是一定要指向同一个abc时,它们才全等,很明显,一个在常量区,一个在堆内存,所以它们指向的不是同一个abc,所以它们不全等,也就是(str1==str2)为false。。。而对于简单的数值类型而言不存在这样的问题,只要它们的值相等,就表示此时i 和j是全等的。
yyyy__123
2011-10-11 · TA获得超过140个赞
知道小有建树答主
回答量:144
采纳率:0%
帮助的人:60.3万
展开全部
String是对象类型的数据类型, 对于String类型来说,“==”是用来比较是否是同一个对象;而比较对象的内容是否相等时,通常使用“equals”即if(a.equals(b))。str1和str2是两个不同的对象,所以楼主会得到false。
Integer是整型的数据类型,“==”用于比较大小。所以是true。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
科技程序迷
2011-10-11 · TA获得超过2823个赞
知道大有可为答主
回答量:2240
采纳率:0%
帮助的人:1991万
展开全部
Str1和str2字符串比较不能用==符号运算;正确是Str1.equals(str2)
int i=3是静态分配内存给i
Integer j= new Integer(3)这是动态分配内存给j,Integer是一个类,j前面的那个Integer是类型声明。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cai_love_feng
2011-10-11 · TA获得超过998个赞
知道小有建树答主
回答量:416
采纳率:100%
帮助的人:321万
展开全部
字符串的你自己应该知道吧
通过new关键字出来的字符串,内存重新分配空间,而是用==则表示比较地址
所以不同

对于int 和Integer比较的话,最简单一句话就是向下转型了。

i是int型 j是Integer型
i==j则将Integer向下转型成int型

因此一比较就相同了
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式