zoukankan      html  css  js  c++  java
  • String类型中"=="和"equals"的区别

    "=="比较的是两个字符串的内存地址。  "equals"比较的是两个字符串的实际值。

    例子1.

    String s1="abc";
    String s2="abc";
    if(s1.equals(s2)){
        System.out.println("两个字符串值相等")
    }
    if(s1==s2){
         System.out.println("两个字符串指向同一个内存地址");
    }

    此时输出:两个字符串值相等

         两个字符串指向同一个内存地址

    why:当给s2赋值abc时,s2会自动去寻找有没有abc这个值得字符串。如果有,会copy  s1(包含内存地址)。如果没有,再创建一个新内存地址。

    例子2.

    String s1="abc";
    String s2=new String("abc")
    if(s1.equals(s2)){
        System.out.println("两个字符串值相等")
    }
    if(s1==s2){
         System.out.println("两个字符串指向同一个内存地址");
    }

    此时输出:两个字符串值相等

    why:s2创建了一个新对象,值为abc,与s1不再是同一个内存地址,所以只输出:两个字符串相等

    例子3.

    String s1="abc";
    String s2=new String()
    s2="abc";
    if(s1.equals(s2)){
        System.out.println("两个字符串值相等")
    }
    if(s1==s2){
         System.out.println("两个字符串指向同一个内存地址");
    }

    此时输出:两个字符串值相等

         两个字符串指向同一个内存地址

    why: 虽然new了一个新对象,但没有在此时给值,后来赋值的时候,仍是copy 了s1的内存地址。

    例子4.

    String s1="abc";
    String s2=new String("abc");
    s2=s2.intern();
    if(s1.equals(s2)){
        System.out.println("两个字符串值相等")
    }
    if(s1==s2){
         System.out.println("两个字符串指向同一个内存地址");
    }

    此时输出:两个字符串值相等

          两个字符串指向同一个内存地址

    why: 调用了intern()方法,此时s2先去找有没有abc,如果有,copy 内存地址,如果没有,创建新的。

  • 相关阅读:
    String、StringBuilder、StringBuffer区别
    深拷贝和浅拷贝
    二叉查找树(一)
    二叉树的遍历
    二叉树
    递归
    队列

    数据结构基础
    视图
  • 原文地址:https://www.cnblogs.com/xiao-ran/p/9829795.html
Copyright © 2011-2022 走看看