除了四类八种基本数据类型,还有一些基本数据类型对应引用类型(Integer等包装类和作String类)那么这些引用类型的== equals()方法有什么区别呢?
String引用类型对比
String类型对比比较特殊
上代码
//String作为类来使用 使用new关键字实例化
String s1 =new String("ABC");
String s2 =new String("ABC");
System.out.println("String类运行结果是");
System.out.println(s1==s2);
System.out.println(s1.equals(s2));
//String作为基本变量来使用 使用=实例化
String s3 ="ABC";
String s4 ="ABC";
System.out.println("当作基本变量,运行结果是");
System.out.println(s3==s4);
System.out.println(s3.equals(s4));
String类运行结果是
false
true
当作基本变量,运行结果是
true
true
注意到==结果不同,首先大家要明确==对比的是引用,为什么当作基本变量赋值时就相同了呢
s1,s2 使用new声明 在Java看来是两个位置的两个不同对象,引用不同 ==返回false;
s3 ,s4将String当作基本变量来使用;String是不变变量 s3赋值ABC后
找到了直接把ABC的引用赋给s4
此时s3 s4地址完全相同
在java看来完全是一个变量 == equals()方法返回值是true
包装类== 与 equals()方法对比
那么类似的其他基本数据类型的包装类呢
Integer等其他基本数据类型对应的引用类,也称包装类的== equals对比
Integer i1 =new Integer(1);
Integer i2 =new Integer(1);
System.out.println("当作类运行结果是");
System.out.println(i1==i2);
System.out.println(i1.equals(i2));
Integer i3 =1;
Integer i4 =1;
System.out.println("当作基本数据类型运行结果是");
System.out.println(i3==i4);
System.out.println(i3.equals(i4));
当作类运行结果是
false
true
当作基本数据类型运行结果是
true
true
和String完全一样
总结
- 类 即使用new实例化时,两个地址 ==是false;
- 当成基本数据类型赋值时,内容相同则占用同一地址==是true;
- equals对比内容 都是true;
所以大家使用包装类及String类时 推荐使用equals()方法比较,不容易产生问题