首先明确一点,在Java中==比较的是两个对象的地址,equals()比较的是两个对象的值,如果使用equals()来替换==,则两个输出结果都为true。

言归正传,为什么第一个返回为false?

先看一下intern()这个方法的描述:

大意就是是一个字符串调用interned()方法的时候,如果池中有和这个字符串值相等的字符串,就会将池中的字符串返回,如果没有,就将这个字符串添加进去,并返回这个字符串的引用。

but,通过new String("string")这个构造方法是先在字符串池中创建了构造参数"string",这是第一次创建,字符串池中保存的是第一次的引用。接着new String()从字符串池中复制了"string",在堆中重新创建的了一次对象,这是第二次创建,所以调用interned()之后返回的是第一次创建的字符串池中的"string",而str1是堆中的"string",值相同但是地址不一样,所以==为false。

str2的StringBuilder的toString()

是通过char[]调用String数组,在字符串池中创建了abcdef这个字符串,字符串中保存的str2的引用,所以调用interned()的时候返回的是str2的引用,所以==为true。

这个问题我刚看到也是不知道为什么,也是思考了一下午直到现在才想明白。希望多提这种问题来促进大家的思考和交流,共同成长。

java new string作用_java中直接new String对象?相关推荐

  1. java comparable接口作用_Java 中 Comparable 接口的意义和用法

    一, 为何需要实现Comparable接口 我们知道Collections类中包含很多对实现Collection接口的容器各种操作的静态方法. 当然, 其中最长用的莫过于排序了(Collections ...

  2. java中string范围_java中long parseLong(String s)方法中string(十进制数字)的范围?

    java中long parseLong(String s)方法中string(十进制数字)的范围? 來源:互聯網  2009-06-19 05:05:28  評論 分類: 電腦/網絡 >> ...

  3. java如何遍历字典_Java中如何遍历Map对象的4种方法

    在Java中如何遍历Map对象 How to Iterate Over a Map in Java 在java中遍历Map有不少的方法.我们看一下最常用的方法及其优缺点. 既然java中的所有map都 ...

  4. java finally的作用_java中finally关键字的特点和作用是什么

    java中finally关键字的特点和作用是什么 发布时间:2020-09-08 11:12:01 来源:亿速云 阅读:114 作者:小新 小编给大家分享一下java中finally关键字的特点和作用 ...

  5. java 守护线程 作用_java中守护线程的一些概念和用法

    网上的资料中,守护线程的功能一般都是"只要当前JVM实例中尚存任何一个非守护线程没有结束,守护线程就全部工作:只有当最后一个非守护线程结束是,守护线程随着JVM一同结束工作,Daemon作用 ...

  6. java 构造函数的作用_Java中构造函数的作用(转)

    https://blog.csdn.net/vipmao/article/details/51530954,我觉得讲的非常好,学习到了 构造函数的最大作用就是创建对象时完成初始化,当我们在new一个对 ...

  7. java throws的作用_Java中throws..throw的使用与说明

    throws语句 throws总是出现在一个函数头中,用来标明该成员函数可能抛出的各种异常.对大多数Exception子类来说,Java 编译器会强迫你声明在一个成员函数中抛出的异常的类型.如果异常的 ...

  8. java的rsa作用_java 中RSA的方式实现非对称加密的实例

    java 中rsa的方式实现非对称加密的实例 rsa通俗理解: 你只要去想:既然是加密,那肯定是不希望别人知道我的消息,所以只有我才能解密,所以可得出公钥负责加密,私钥负责解密:同理,既然是签名,那肯 ...

  9. java里面序列化作用_java中序列化的作用

    一  什么叫序列化 通俗点讲:它是处理对象流的一种机制,即可以很方便的保存内存中java对象的状态,同时也为了方便传输. 二 序列化有什么作用 1.方便传输,速度快,还很安全,被调用方序列化,调用方反 ...

最新文章

  1. PYTHON——多线程:队列Queue数据结构
  2. python django flask_Flask 与 Django 的简单对比
  3. Leetcode-探索 | 旋转数组
  4. 腾讯视频云黄斌:打造toB的产品与运营体系
  5. 【ffmpeg for wince】音视频编解码多平台移植(for window/wince))ffmpeg
  6. 分割、检测与定位,高分辨率网络显神威!这会是席卷深度学习的通用结构吗?...
  7. Python学习之==常用模块
  8. 如何用python编写操作系统_操作系统介绍、python基础
  9. MATLAB 谐波 模块,simulink 谐波分析_matlab谐波分析_simulink中sign模块(6)
  10. C语言—俄罗斯方块(新手向)
  11. 干货分享 | 最新机器学习视频教程与数据集下载(持续更新......)
  12. centos7dos命令下打开网络
  13. FortiGate命令行
  14. 计算机做word的表格,怎么用word做表格,电脑word表格详细制作教程
  15. Vue3动态绑定组件警告处理
  16. 必get!建模中的对称美 | 3D MAX中三种对齐工具
  17. redhat安装gcc
  18. 导出多级表头的Excel表格
  19. 英语PETS一级和计算机一级,全国英语等级考试PETS一级证书
  20. Ijkplay视频播放简单快速集成

热门文章

  1. 设置Spring 3开发环境
  2. Xuggler开发教程
  3. Linux 命令之 pwunconv -- 关闭投影密码
  4. IntelliJ IDEA修改项目的根目录名称_修改包目录的名称_修改模块名称_修改项目名称
  5. Linux 命令之 uname -- 显示系统/主机的相关信息
  6. linux vim自动执行快捷键,Linux Vim快捷键操作命令整理
  7. python比较两张图片是否一样_opencv_判断两张图片是否相同
  8. python中创建集合的语句_Python 集合(set) 介绍
  9. C 线程的使用~(下)
  10. C 多线程的互斥锁应用RAII机制