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

  • 相关阅读:
    request库下载
    tomcat启动正常,但是访问项目时,404. Eclipse没有正确部署工程项目
    Tomcat端口被占用
    administrator账户权限如何开启和关闭
    团队作业2 需求分析与原型设计
    矩阵快速幂
    散列函数的应用及其安全性
    递归实例
    芯片测试
    优先队列小知识
  • 原文地址:https://www.cnblogs.com/xiao-ran/p/9829795.html
Copyright © 2011-2022 走看看