java中==和equals()的区别
在java学习和面试中经常遇到这个问题 == 和equals 的区别
1 . ==比较的两个对象的堆内存地址,如果内存地址相同,则返回true,equals是比较的对象的值
// 初始化变量 int
int a=10;
int b=10;
/* 输出结果为true,对于数值类型的数据只要值相等,便会返回为true */
System.out.println(a==b);
// 初始化变量 String
String a1="123";
String b1="123";
/* 输出结果为true "123" 在常量池里 123 同时指向了a1 b1,所以这种情况也返回 true*/
System.out.println(a1==b1);
// 初始化变量 String
String a2="123";
String b2="123";
/* 输出结果为 true ,他们不仅指向的地址相同,值也想等 ,则返回为true */
System.out.println(a2==b2);
2 不同的对象是什么个情况
// new 新的对象
String a3=new String ("123");
String b3=new String ("123");
/* 输出为false 产生了新的对象 地址不同 则返回为false */
System.out.println(a3==b3);
/* 输出为 true String中将equals 方法进行了重写,比较的是所指向的对象的内容 */
System.out.println(a3.equals(b3));
3 对于包装类型数据(integer)的特殊情况
// integer 类型数据
Integer a4=127;
Integer b4=127;
/* 输出为true*/
System.out.println(a4==b4);
Integer a5=128;
Integer b5=128;
/* 输出为false Integer 在常量池中的存储范围为[-128,127],127在这范围内,因此是直接存储于常量池的,而128不在这范围内 所以是创建了两个不同的对象 来保存这个值 */
System.out.println(a5==b5);
总结
1 ==,如果用于基本数据类型的变量,则比较其存储的 “值”是否相等;如果作用于引用类型的变量,则比较的是指向对象的地址
2)equals,equals方法不能用于基本数据类型的变量 如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;而String对equals方法进行了重写,用来比较指向的字符串对象所存储的字符串是否相等,java中很多类都要求equals方法进行了重写。