==与.equals方法的比较区别

时间:2022-08-22 16:16:59

下列java程序输出结果为_ _ _.

        int i = 0;
Integer j = new Integer(i);

System.out.println(i == j);
System.out.println(j.equals(i));

String str1 = "123";
String str2 = new String(str1);

System.out.println(str1 == str2);
System.out.println(str1.equals(str2));

答:true,true, false, true


解释:

java中的Integer是对int类型的包装
1 当执行i == j代码时,Java系统默认先将Integer类型转化为int基本类型(int j),而int i和int j的值都是1,因此i == j成立
2 反之当执行j.equals(i)时,Java系统默认将int i基本类型重新封装成Integer对象类型,再比较两个对象中的内容是否相等,而两个对象的值都为1,因此也为true

java中的String是不可变的,”123”字符串第一次被创建时会被保存在常量池中
1 当调用String str2 = new String(str1);时,会重新开辟一块内存空间,并赋值给str2引用,但是其内容是”123”字符串,因此str1与str2的物理地址并不是相等的
str1 == str2返回false
2 因为str1和str2中的内容都是”123”,因此str1.equals(str2)返回true