演示String的intern方法,以及各种拼接字符串的区别

package string;/*** @Author gzx* @create 2022-1-14 jdk8*/
public class Intern {public static void main(String[] args) {String s1 = new String("intern");//s1指向堆内存String s2="intern";//s2指向字符串常量池String s3 = s1.intern();//s3也指向字符串常量池(常量池中同一字符串只存一份),和s2指向同一内存单元String s0=new String("intern").intern();//s0也指向字符串常量池System.out.println(s0.hashCode());System.out.println(s1.hashCode());System.out.println(s2.hashCode());System.out.println(s3.hashCode());System.out.println(s1==s2);System.out.println(s3==s2);System.out.println(s0==s2);System.out.println("/");String s4="pre"+"sub";//s4指向字符串常量池String s5=new String("pre")+"sub";//s5指向堆内存的存储单元String s6=s5.intern();//s6也指向字符串常量池,和s4指向同一内存单元String s7=new String("pre").intern()+"sub";//s7指向堆中新的内存单元System.out.println(s4.hashCode());System.out.println(s5.hashCode());System.out.println(s6.hashCode());System.out.println(s7.hashCode());System.out.println(s4==s5);System.out.println(s4==s6);System.out.println(s4==s7);
//  只要是指向字符串常量池的引用,如果字符串的内容相同,那么这些引用指向的是同一块内存单元,所以这些引用地址都相同
//  "this"+"that"这种类型的拼接存在于常量池,返回常量池中的引用地址
//  new ("this")+"that"这种类型的拼接返回的是堆中的引用,有new参与的字符串拼接,返回的都是存在于堆中的新的引用,即使new了对象后接着调用intern方法(如果new了之后不参与拼接,则返回的是常量池中的地址引用,可对比s0和s7的结果总结)
//  任何字符串的引用调用intern方法,都返回在字符串常量池中的引用
}
}

结果

-1183762670
-1183762670
-1183762670
-1183762670
false
true
true
/
-980097859
-980097859
-980097859
-980097859
false
true
false

String的intern方法演示及各种字符串的拼接对比相关推荐

  1. Java之String系列--intern方法的作用及原理

    原文网址:Java之String系列--intern方法的作用及原理_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Java的String的intern方法的原理. 常量池简介 在 JAVA 语言中 ...

  2. Java String的intern方法

    1. 首先String不属于8种基本数据类型,String是一个对象. 因为对象的默认值是null,所以String的默认值也是null:但它又是一种特殊的对象,有其它对象没有的一些特性. 2. ne ...

  3. [转]String 之 new String()和 intern()方法深入分析

    引入 String,是 Java 中除了基本数据类型以外,最为重要的一个类型了.很多人会认为他比较简单.但是和 String 有关的面试题有很多,下面我随便找两道面试题,看看你能不能都答对: Q1:S ...

  4. String中intern()方法

    本文参考 https://blog.csdn.net/believesoul/article/details/79588305 ,我对这篇文章进行了一些小小的整理和修改.这篇文章很好的对intern( ...

  5. 使用String的intern方法节省内存

    Attila Szegedis 在他讲述 JVM 知识的文档中一直强调,清楚知道内存中存储的数据量是非常重要的.我一开始感到十分惊讶,因为一般情况下,在企业开发中并不是经常需要关注对象的大小.他对此给 ...

  6. String中intern方法的作用

    前言 读完这篇文章你可以了解,String对象在虚拟机内存中的存放,intern的作用,这么多String对象的创建到底有什么区别,String 创建的对象有几个!! 进入正题 先科普几个知识点 1. ...

  7. java intern_java String的intern方法

    我们知道再jvm的运行时内存可以分为堆.方法区.程序计数器.虚拟机栈和本地方法栈.而在方法区中有一个字符串常量池,用来保存字符串这个不可变量.如果我们使用String str=new String(& ...

  8. 字符斜杠是合法常量吗_【面试秘籍】你对String的intern方法了解吗

    我们先来看个例子: public class StringTest { public static void main(String[] args) { String a = "A" ...

  9. JDK8中String的intern()方法详细解读【内存图解+多种例子+1.1w字长文】

    文章目录 一.前言 二.图文理解String创建对象 1.例子一 2.例子二 3.例子三 4.例子四 5.例子五 6.例子六 三.深入理解intern()方法 1. 源码查看 2. 例子一 3. 例子 ...

最新文章

  1. Unix操作系统背后的女程序员Lorinda Cherry去世,享年78岁
  2. MySQL学习笔记 约束以及修改数据表
  3. windows winrar 指令_Windows上WinRAR.exe命令行参数说明(转载) .
  4. html如何做卷展菜单,“选择”卷展栏(可编辑网格)
  5. 谈用VB无窗口透明Usercontrol编写透明浮动按钮
  6. easyexcel多个sheet导入_Easypoi实现excel多sheet表导入导出功能
  7. window.load和$(document).ready()事件
  8. php iterator接口,PHP预定义接口之Iterator(迭代器)接口演示
  9. 自制CMSIS-DAP下载器
  10. 小学计算机英语,小学英语电脑版
  11. 【下载】《大教堂和市集》:开放源代码运动的《圣经》
  12. 有一个多项式:Pn(x)=a0x+a1x+….+anx(n=10),它们的系数存放在一个一维数组中,编写程序,输入系数和x的值,计算并输出Pn(x)的结果。
  13. 苹果电脑带有双系统Mac/Win,如何更改默认启动系统?
  14. 01_行销(Marketing)里的有用的KPI-转换率 (Conversion Rate)
  15. 开源项目之饭否 for Android
  16. 离散数学及其应用_第1章_基础:逻辑和证明
  17. 拒绝java_java拒绝策略 - V丶zxw的个人空间 - OSCHINA - 中文开源技术交流社区
  18. 谷歌浏览器自动定时刷新网页插件名称
  19. 杭电oj刷题2022
  20. Matlab的BP汉字识别GU(写字板功能)

热门文章

  1. 软件测试 | 手把手教你如何使用 Charles 抓包工具(电脑+手机端)
  2. excel mysql在线库存_excel如何制作进货销售库存表
  3. luoguP1640
  4. 人脑与计算机之间有什么联系,人脑记忆功能与电脑工作原理之间的某些相似之处(自编)...
  5. php 外呼界面,一种WEB网页端话机系统及外呼方法与流程
  6. 《基于改进粒子群算法的混合储能系统容量优化》完全复现
  7. 如何编制项目进度计划
  8. 电厂防雷检测古建筑防雷检测河南万佳防雷检测验收
  9. 树莓派 gpio / 串口通信
  10. 英国Oracle电力,益和电力Oracle笔试题分享