title: 基础复习:001.“==” 与 equals的区别
“==” 与 equals的区别
== 1、比较的是值
比较基本的数据类型,比较的是数值
比较引用类型:比较引用指向的值(地址)
2、equals
默认比较也是地址,因为这个方法的最初定义在Object上,默认的实现就是比较地址
自定义的类,如果需要比较的是内容,那么就要学String,重写equals方法
代码案例:测试以下的每道题,你是否能够正确得到答案?
String s = “java”;
String s = new String(“java”);
这两者的内存分配方式是不一样的。
第一种方式,JVM会将其分配到常量池,而第二种方式是分配到堆内存
/**
* 测试 == 和 eauals
*/
@Test
public void test01(){
String s1 = new String("zs");
String s2 = new String("zs");
System.out.println(s1 == s2); // false
String s3 = "zs"; // 指向常量池地址
String s4 = "zs";
System.out.println(s3 == s4); // true
System.out.println(s3 == s1); // false
String s5 = "zszs";
String s6 = s3+s4;
System.out.println(s5 == s6); // false :字符串是个不可变对象,相加时需要创建新对象(相当于new了一下) 用反编译工具验证
final String s7 = "zs"; // final修饰的不再是变量,是常量
final String s8 = "zs";
String s9 = s7+s8; // 编译器在处理常量运算的时候,会进行优化,将二者之和再转变为常量
System.out.println(s5 == s9); // true
final String s10 = s3+s4; // 右边依然是变量,所以创建的时候还是要new,而final是影响的s10,而不会影响s3+s4的特性
System.out.println(s5 == s10); // false
}