jvm虚拟机第二章阅读

本文探讨了Java中的String::intern()方法,解释了其工作原理。通过示例代码展示,当字符串常量池已存在某字符串时,intern()会返回池中的引用;若不存在,则创建并返回。同时,强调了使用==而非equals()进行对象引用比较的重要性。
摘要由CSDN通过智能技术生成

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

看的jvm虚拟机第三版,学到的小东西

一、String::intern是什么?

Sting字符串调用intern方法,如果字符串常量池中包含该字符串,就返回字符串常量池中的对象引用,否则,在字符串常量池中也创建一个该字符串的引用,然后,返回堆中字符串常量池中的引用。

二、使用步骤

1.测试代码

代码如下(示例):

	String ss="abc";
    String ss2=new StringBuilder("ab").append("c").toString();
    System.out.println(ss2.intern() == ss2);
    
    String ss1=new StringBuilder("de").append("f").toString();
    System.out.println(ss1.intern() == ss1);

结果(示例):

	false
	true

第一行,在字符串常量池中创建了“abc“字符串,并在堆中创建了ss对象,内容为‘abc’
第二行,在堆中创建了ss2对象,内容为’abc’
第三行,ss2.intern(),因为字符串常量池中存在‘abc’,所以返回字符串常量池的引用,ss2是堆中的对象,是返回堆中的引用,
所以输出为false
第五行,在堆中创建了ss1对象
第六行,ss1.intern(),在字符串常量池中创建了‘def’字符串,并返回堆中对象引用,ss1本身就是堆中的对象
所以输出为true


记得

一定要用 == 做测试,不能用equals方法测试,
因为==比对的是两个对象的地址,而equals比较的是两个对象的值
用equals比较的话,都会是true

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值