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
Java ==操作符与equals方法