【java学习—八】==操作符与equals方法(2)

文章目录

  • 1. ==操作符
  • 2. equals方法
  • String对象的创建


1. ==操作符

(1)基本类型比较值 : 只要两个变量的值相等,即为 true.
int a=5; if(a==6){…}

(2)引用类型比较引用 ( 是否指向同一个对象 ): 只有指向同一个对象时,==才返回 true.

		Person p1 = new Person();
		Person p2 = new Person();
		System.out.println(p1 == p2);//输出:false

注意:用“ ==” 进行比较时,符号两边的数据类型必须兼容 ( 可自动转换的基本数据类型除外 ) ,否则编译出错;

2. equals方法

equals():所有类都继承了 Object ,也就获得了 equals() 方法。还可以重写。
(1) 只能比较引用类型,其作用与“ ==” 相同 , 比较是否指向同一个对象。格式 :obj1.equals(obj2)

		Person p1 = new Person();
		Person p2 = new Person();
		System.out.println(p1 == p2);//false
		System.out.println(p1.equals(p2));//false

特例
当用 equals() 方法进行比较时,对类File 、String 、Date及包装类( Wrapper Class )来说,是比较类型及内容不考虑引用的是否是同一个对象。原因是在这些类中重写了 Object 类的 equals() 方法。

		String s1 = new String("abc");
		String s2 = new String("abc");
		
		System.out.println(s1 == s2);//false
		System.out.println(s1.equals(s2));//true

结论:
对于对象来说:
特殊的类,如String、File、Data,使用==比较的是对象(对象的地址),equals比较的是内容
②除了特殊的类之外的其他普通的类的对象,==和equals比较的都是对象(对象的内存地址)。
③如果你想改变某一个类的equals,不想用equals来比较对象的内存地址,就需要重写equals方法

String对象的创建

(1)字面量创建String对象

String s1 = "abc"; //常量池中添加“abc”对象,返回引用地址给s1对象
String s2 = "abc"; //通过equals()方法判断常量池中已有值为abc的对象,返回相同的引用。
System.out.println(s1 == s2);//true 所以s1 == s2

(2)new创建String对象

		String s3 = new String("def");//在常量池中添加“def”对象,在堆中创建值为“def”的对象s3,返回指向堆中s3的引用
		String s4 = new String("def");//常量池中已有值为“def”的对象,不做处理,在堆中创建值为“def”的对象s4,返回指向堆中的s4的引用

【java学习—八】==操作符与equals方法(2)_第1张图片

你可能感兴趣的:(java学习,java,学习,python)