美文网首页java 从入门到精通
java 中 String == 原理 equals 和

java 中 String == 原理 equals 和

作者: Exception_Cui | 来源:发表于2021-04-27 15:37 被阅读0次
    image.png
    引用类型,==比较的是地址
    String str1="abc" 相当于直接new 了一个string的对象,值在堆内存的字符串常量池
    String str2="abc" 先是在字符串常量池里面寻找,如果有这个对象,那么直接就赋值给str2,
    所以str1和str2的地址相同
    
    char[] charArray={'a','b','c'}
    现在堆里面创建一个char[]类型的对象,
    String str3=new String(charArray),
    在堆里面创建一个字符串的对象,然后将char类型转换为byte[],然后将地址给str3
    
    String 是个引用类型,一旦定义是不可变得
    String str1=“123”,
    str1 ="234"  //相当于重新new了一个对象
    
    

    == 和equals的区别

    基本数据类型 == 比较的就是值
       
    引用数据类型 或者对象
        重写了      equals   比较的就是值
        没有重写  equals   比较的还是地址
    
    所以一般来讲 == 比较地址,equals比较值
    
    int a =0;
    int b=0
    a==b;             true  基本数据类型 == 就是比较值
    
    ------------------------------------------------------
    String str1="abc" ;
    String str2="abc";
    str1 == str2    true 引用数据类型 == 比较的就是地址(因为String 有个字符串常量池,所以这个值为true)
    
    Persion p1= new Persion("张三");
    Persion p2 =new Persion("张三"); 
    p1 ==p2         false  == 比较的是地址
    ------------------------------------------------------
    
    基本数据类型没有equals
    
    String str1 = "abc";
    String str2 = new String("abc");
    str1 == str2                   false 此时两个地址不一样
    str1.equals(str2)              true    //比较的是内容  原因是 String 重写了 equals 方法
     
    Persion p1= new Persion("张三");
    Persion p2 =new Persion("张三"); 
    p1== p2                        false 此时两个地址不一样
    p1.equals(p2)                  false   //没有重写 equals 还是比较的地址,查看object的源码
    
    image.png image.png

    相关文章

      网友评论

        本文标题:java 中 String == 原理 equals 和

        本文链接:https://www.haomeiwen.com/subject/astprltx.html