zoukankan      html  css  js  c++  java
  • String类型使用==与equils()的区别于原因

    简单理解两个概念:

    一:Java机制里有很多空间,我们的问题涉及到以下三种空间:

    1、stack(栈)

    2、heap(堆)

    3、常量池

    二:java中的String是引用类型。

    创建的String对象,实际上存储的是一个地址。

    下面举例:

    创建String对象的两种方式:
    String s1 = new String("11");   //new一个对象
    String s2 = "11";               //双引号创建
    System.out.println(s1 == s2);   //false
    System.out.println(s1.equals(s2));  //true

    【解析】:s1、s2都是引用类型,其存储的是字符串的地址。

    第一种方法,先将字符串"11"存储在常量池中,然后在heap中创建一个对象,该对象指向常量池中的"11",最后将s1指向heap中创建的这个对象。

    第二种方法,直接将字符串存储在常量池中,然后将s2指向常量池种中的"11"。

    也就是说,s1和s2存储的内容是一样的,都是"11",但地址不一样,s1保存的是heap中那个对象的地址,s2中保存的是常量池中"11"的地址。

    三:双等于号"=="比较的是地址,equals()比较的是内容,所以会有上面的结果。

    最后再说一点:s1和s2都是引用,他们本身存储在stack(栈)中。

    了解了他们的机制后,尝试理解下面的例子:

    String s1 = new String("11");
    String s2 = "11";
    String s3 = "11";
    String s4 = new String("11");
    System.out.println(s1 == s2);     //false
    System.out.println(s1.equals(s2));//true
    System.out.println(s2 == s3);     //true
    System.out.println(s1 == s4);     //false


  • 相关阅读:
    redux核心知识
    react性能优化要点
    react-router4的使用备注
    selenium启动Chrome配置参数问题
    Navicat15最新版本破解和破解报错总结
    Silence主题美化-部署
    vscode打开文件,中文显示乱码(已解决)
    Windows下Charles从下载安装到证书设置和浏览器抓包
    python下的selenium和chrome driver的安装
    Python 直接赋值、浅拷贝和深度拷贝解析
  • 原文地址:https://www.cnblogs.com/mengfff/p/6764792.html
Copyright © 2011-2022 走看看