一、创建String字符串类型对象
创建方式一:在“字符串缓存池”中分配空间
String s1="让我再看你一眼从南到北";
String s2="让我再看你一眼从南到北";
String s3="你好"
==(比较内存地址):system.out.println(s1==s2);
system.out.println(s1==s3);
输出:true
false
若两字符串相等,则两字符串对应同一内存空间,当两字符串的内存地址相同时,返回true。若两字符串不相等,则给两字符串分别分配各自对应的内存空间,即返回false。
equals()(比较内容):system.out.println(s1.equals(s2))
system.out.println(s1.equals(s3))
输出:true
false
当两字符串内容相同时,返回true;否则返回false。
创建方式二 :通过new关键字在Heap堆区中重新分配新的内存空间
String s3=new String("让我再看你一眼从南到北");
String s4=new String("让我再看你一眼从南到北");
String s5=new String("你好");
==(比较内存地址):system.out.println(s3==s4);
system.out.println(s3==s5);
输出:false
false
通过new关键字创建了三个String 对象,它们对应着不同的内存空间,故s3、s4、s5的内存地址都不同,用"=="比较后返回false
equals()(比较内容):system.out.println(s3.equals(s4))
system.out.println(s3.equals(s5))
输出:true
false
下图是equals()方法的重写:
当两字符串内容相同时,返回true;否则返回false。
二、“==”和equals()的区别
1.“==”是关系运算符,equals()是Obeject类中定义的方法
2.基本数据类型:使用==比较,无法使用equals()方法
3.引用数据类型:使用==比较的是内存地址。如果没有重写equals()方法,仍然调用的是Object父类的equals()方法,则比较的是内存地址;若重写了equals()方法,则比较的是值。