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 内存地址,如果没有,创建新的。

  • 相关阅读:
    JS站点
    1011 World Cup Betting (20分)
    1007 Maximum Subsequence Sum (25分)(动态规划DP)
    1006 Sign In and Sign Out (25分)
    1005 Spell It Right (20分)
    1004 Counting Leaves (30分)(DFS)
    1003 Emergency (25分)(Dijkstra算法)
    1002 A+B for Polynomials (25分)
    1001 A+B Format (20分)
    canvas
  • 原文地址:https://www.cnblogs.com/xiao-ran/p/9829795.html
Copyright © 2011-2022 走看看