
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
这是为什么?请给解释一下。谢谢 展开
String str2=new String("abc");
if (Str1==str2) 显示为false
而如下语句:
int i=3;
Integer j=new Integer(3);
if (i==j)显示为true
这是为什么?请给解释一下。谢谢 展开
4个回答
展开全部
str1是在常量区生成了一个abc的字符串,并且str1指向它。而str2是在堆内存里new了一个String类的实例,值为abc,如果是str1.equals(str2);这个时候才为true,而str1==str2这个表达式是全等的意思,它们的值不仅要相等,引用也得一样,也就是一定要指向同一个abc时,它们才全等,很明显,一个在常量区,一个在堆内存,所以它们指向的不是同一个abc,所以它们不全等,也就是(str1==str2)为false。。。而对于简单的数值类型而言不存在这样的问题,只要它们的值相等,就表示此时i 和j是全等的。
展开全部
String是对象类型的数据类型, 对于String类型来说,“==”是用来比较是否是同一个对象;而比较对象的内容是否相等时,通常使用“equals”即if(a.equals(b))。str1和str2是两个不同的对象,所以楼主会得到false。
Integer是整型的数据类型,“==”用于比较大小。所以是true。
Integer是整型的数据类型,“==”用于比较大小。所以是true。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Str1和str2字符串比较不能用==符号运算;正确是Str1.equals(str2)
int i=3是静态分配内存给i
Integer j= new Integer(3)这是动态分配内存给j,Integer是一个类,j前面的那个Integer是类型声明。
int i=3是静态分配内存给i
Integer j= new Integer(3)这是动态分配内存给j,Integer是一个类,j前面的那个Integer是类型声明。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
字符串的你自己应该知道吧
通过new关键字出来的字符串,内存重新分配空间,而是用==则表示比较地址
所以不同
对于int 和Integer比较的话,最简单一句话就是向下转型了。
i是int型 j是Integer型
i==j则将Integer向下转型成int型
因此一比较就相同了
通过new关键字出来的字符串,内存重新分配空间,而是用==则表示比较地址
所以不同
对于int 和Integer比较的话,最简单一句话就是向下转型了。
i是int型 j是Integer型
i==j则将Integer向下转型成int型
因此一比较就相同了
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询