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。
Str1和str2字符串比较不能用==符号运算;正确是Str1.equals(str2)
int i=3是静态分配内存给i
Integer j= new Integer(3)这是动态分配内存给j,Integer是一个类,j前面的那个Integer是类型声明。
字符串的你自己应该知道吧
通过new关键字出来的字符串,内存重新分配空间,而是用==则表示比较地址
所以不同
对于int 和Integer比较的话,最简单一句话就是向下转型了。
i是int型 j是Integer型
i==j则将Integer向下转型成int型
因此一比较就相同了