1.关于 java 中 的 == 和 equals 的比较结果,衍生基本类型和引用类型的比较特点:
众所周知,java世界内 分为两种数据类型:
1).第一种就是基础数据类型
byte short int long 整数数据类型
float double 小数数据类型
boolean 布尔类型
char 单字符类型
2).第二种为引用数据类型:
例如 String 字符串; 数组 ; 类
ok,基础知识过后,上代码先
public class day2{
public static void main(String[] args) {
String st1 = "lifeng";
String st6 = "lifeng";
String st2 = new String("lifeng");
String st3 = new String("lifeng");
String st4 = new String("lifeng");
String st5 = st2;
System.out.println("st1 equals st2-->"+(st1.equals(st2)));
System.out.println("st2 equals st3-->"+(st2.equals(st3)));
System.out.println("st1 equals st3-->"+(st1.equals(st3)));
System.out.println("st1 == st2-->"+(st1==st2));
System.out.println("st1 == st6-->"+(st1==st6));
System.out.println("st2 == st3-->"+(st2==st3));
System.out.println("st2 == st4-->"+(st2==st4));
System.out.println("st2 == st5-->"+(st2==st5));
System.out.println("st3 == st4-->"+(st3==st4));
}
}
运行结果如下:
st1 equals st2-->true
st2 equals st3-->true
st1 equals st3-->true
st1 == st2-->false
st1 == st6-->true // String st1 = "lifeng"; String st6 = "lifeng";
st2 == st3-->false
st2 == st4-->false
st2 == st5-->true // String st5 = st2;
st3 == st4-->false
1.很明显,equals比较的是值,只要相等就可以了.
2.1" == " 比较的是地址值.
String st1 = “lifeng”;
String st6 = “lifeng”;
匿名对象的指针问题
因为 String 类名 = “字符串值” 是匿名的,所以只要有"lifeng",会自动分配好了一个地址值.如果值相等就会指向同一个地址
如果值不相等,就会重新分配值.
2.2如果是 new 出来的字符串,堆内存会重新分配内存.比较的话是不同的
程序进入main主方法中了
main 方法先入栈,关于字符串创建对象的,有一个对象池,如果有相同的值就直接将指针指向默认值地址(堆内存).
今天的总结到这里.