1、举例代码如下:public class StringDemo {
public static void main(String[
args) {
String s1 = \"Hello\";
String s2 = \"Hello\";
System.out.println(s1 == s2); // true
2、稍微改动一下程序 , 会有奇怪的发现:public class StringDemo {
public static void main(String args[
) {
String str1 = \"Hello\";
String str2 = new String(\"Hello\");
String str3 = str2; // 引用传递
System.out.println(str1 == str2); // false
System.out.println(str1 == str3); // false
System.out.println(str2 == str3); // true
System.out.println(str1.equals(str2)); // true
System.out.println(str1.equals(str3)); // true
System.out.println(str2.equals(str3)); // true
上方我们new了一个对象 , 用“==”比较s1和s2 , 返回的结果却是false;而用用“equals”比较s1和s2 , 返回的结果是true 。
为了分析上面的代码 , 我们必须首先分析堆内存空间和栈内存空间 , 这一点非常重要:
看完上面的图 , 再结合上面的代码 , 就一目了然了 。 现在我们可以给自己出一道面试题:
面试题:请解释字符串比较之中“==”和equals()的区别?
==:比较的是两个字符串内存地址(堆内存)的值是否相等 , 属于地址值比较;
equals():比较的是两个字符串的内容 , 属于内容比较 。
以后进行字符串相等判断的时候都使用equals() 。
3、再次更改程序:public class ObjectDemo{
public static void main(String[
args) {
String s1 = \"Hello\";
String s2 = new String(\"Hello\");
s2 = s2.intern();
System.out.println(s1 == s2); // true
System.out.println(s1.equals(s2)); // true
4、比较两个对象的值:代码如下:
上述代码的第5行中 , java.lang.String的intern()方法\"abc\".intern()方法的返回值还是字符串\"abc\" , 表面上看起来好像这个方法没什么用处 。 但实际上 , 它做了个小动作:检查字符串池里是否存在\"abc\"这么一个字符串 , 如果存在 , 就返回池里的字符串;如果不存在 , 该方法会 把\"abc\"添加到字符串池中 , 然后再返回它的引用 。
public class Demo6 {
public static void main(String args[
) {
Student student1 = new Student(\"生命壹号\" 22 \"成都\");
Student student2 = new Student(\"生命壹号\" 22 \"成都\");
System.out.println(student1 == student2); //false
System.out.println(student1.equals(student2)); //true
class Student {
private String name;
private int age;
private String address;
public Student(String name int age String address) {
this.name = name;
this.age = age;
this.address = address;
//重写Object类中的equals方法(比较两个对象的值是否相等)
- Java|vivo携手新华社,发起“寻找中国之美”互动活动
- Java|更舒适的运动蓝牙耳机,Skullcandy运动豆上手体验:真香
- 云安全|为什么Android开发使用Java而不是C语言?
- 飞利浦·斯塔克|Java培训:在Java应用程序中测试微服务
- Java|元宇宙 群雄并起,Coinbase进军NFT领域
- Java|美国服务器设置禁PING的方法步骤
- Java|千元级暂无对手,自适应降噪真无线,cleer轻奢蓝牙耳机试用
- Java|除了做好手机体验之外,魅族这一点真的令人点赞
- Java|RTX3050TI Latap 性能评测,距离RTX3060的差距究竟有多大?
- 网易|Java培训:java开发人员常用的 Java 跟踪工具