Java ==操作符与equals方法
== 操作符
基本类型比较值:只要两个变量值相等,即为true
int a = 5;if(a == 6){…}
引用类型比较引用(是否指向同一个对象):只有指向同一个对象时,==才返回true
Person p1 = new() Person
Person p2 = new() Person
if(p1 == p2){…}
用"=="进行比较时,符号两边的数据类型必须兼容(可以自动转化的基本类型除外),否则编译报错
equals()方法
所有类都继承了Object,也就获得了equals()方法.还可以重写.
只能用于比较引用类型,其作用与"=="相同,比较是否指向同一个对象.
格式:obj1.equals(obj2)
特例:当用equals()方法进行比较时,对类File,String,Data及包装类来说,是比较类型及内容而不考虑引用的是否是同一个对象;
原因:在这些类中 重写了Object类的equals方法
对于这些特殊类,使用"=="是比较的对象的地址
equals比较的是内容
String对象的创建
字面量创建String对象
String s1 = “adc” //常量吃中添加"abc"对象,返回引用地址给s1对象
String s2 = “abc”//通过equals()方法判断常量池中已有的值为"abc"的对象,返回相同的引用
System.out.println(s1 == s2); // true
new创建String对象
String s3 = new String(“def”); //在常量池中添加"def"对象,在堆中创建值为"def"的对象s3,返回指向堆中s3的引用
String S4 = new String(“def”); //常量池中已有值为"def"的对象,所以不做处理,在堆中创建值为"def"的对象s4,返回指向堆中s4的引用
String s5 = “x” + “y”; //经过JVM优化,直接在常量池中添加xy对象
String s6 = new String(“1”) +new String(“1”)+new String(“2”)
//通过StringBuild实现,在常量池中添加1和2两个对象,在堆中创建值为112的对象,把地址引用给s6