==和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
我对任何唾手而得,快速,出自本能,即兴,含混的事物没有信心。我相信缓慢,平和,细水长流的力量,踏实,冷静。我不相信缺乏自律精神和不自我建设,不努力,可以得到个人或集体的解放。