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

  • 相关阅读:
    TP-LINK,TL-WR885路由器无线桥接方法
    python3 urllib.request.Request的用法
    requests模块
    python3中引入扩展包时的几个注意事项
    Flask-sqlacodegen之ORM操作
    mysql ERROR 1049 (42000): Unknown database '******' ”错误处理办法
    Python各种包下载路径
    python在Apache中的部署
    Python3 基于 Nginx或Apache 部署 Django 项目
    Python如何发布程序
  • 原文地址:https://www.cnblogs.com/xiao-ran/p/9829795.html
Copyright © 2011-2022 走看看