==和equals区别

区别

先说==

如果是基本类型,那就比较值
如果引用,比较内存地址

那equals()呢?

这是Object的方法,默认比较也是地址,因为这个方法的最初定义在Object上,默认的实现就是比较地址

自定义的类,如果需要比较的是内容,那么就要学String,重写equals方法

看一个案例

String s1 = new String("zs");
String s2 = new String("zs");
System.out.println(s1 == s2);  //false
==比较的是引用地址值,2次new,所以地址必然不一样,new指向的是堆的地址



String s3 = "zs";
String s4 = "zs";
System.out.println(s3 == s4);  // true
因为此时都是引用的常量池



System.out.println(s3 == s1);  // false
肯定false,一个是new,一个是常量池



String s5 = "zszs";
String s6 = s3+s4;
System.out.println(s5 == s6);  //false
s5是常量池地址
字符串不可变,s3+s4相加,会通过new创建新对象。




final String s7 = "zs";
final String s8 = "zs";
String s9 = s7+s8;
System.out.println(s5 == s9);  //true
加final是个常量



final String s10 = s3+s4;
System.out.println(s5 == s10);  //false
原文地址:https://www.cnblogs.com/hellosiyu/p/13735233.html