今天翻看书时遇到了这样一个问题,对于String.intern()方法又有了一些认识和看法。首先我们看它的api

大意就是intern()方法会在常量池中记录首次出现的实例引用,但是在jdk1.6中却不是这样。jdk1.6中会将首次遇到的字符串实例

复制一份放在持久代里,返回的则是永久代中对于这个字符串的引用。

如下图

首先,这个运行环境是jdk1.7,运行后会分别的到true和false.这里由于StringBuilder 会在java堆上创建实例,intern()方法实现不会再复制实例,

只是在常量池中记录首次出现的实例引用,所以为true.而s2返回false是因为“java”这个字符串在执行StringBuilder()方法前已经出现过,

也就是说默认的在字符串常量池中已经有它的引用,不再符合“首次出现的原则”,所以返回false.而“计算机软件”这个字符串是首次出现的,所以

返回true.细节点就是“java”字符串的引用早就有了。这里参考了《深入理解java虚拟机》这本书。希望大家可以多多交流多提意见,感谢大家的观看。

对于java的Sting.intern()的一些注意的更多相关文章

  1. Java中Sting转Timestamp

    Java中Sting转Timestamp 时间转换.png

  2. 通过反编译深入理解Java String及intern(转)

    通过反编译深入理解Java String及intern 原文传送门:http://www.cnblogs.com/paddix/p/5326863.html 一.字符串问题 字符串在我们平时的编码工作 ...

  3. 通过反编译看Java String及intern内幕--费元星站长

    通过反编译看Java String及intern内幕   一.字符串问题 字符串在我们平时的编码工作中其实用的非常多,并且用起来也比较简单,所以很少有人对其做特别深入的研究.倒是面试或者笔试的时候,往 ...

  4. java jdk1.7后 sting intern()方法与之前的区别

    public static void main(String[] args) { String s1 = new StringBuilder("计算机").append(" ...

  5. Java中Sting类型对象内容不可改变

    String拥有一个特殊点叫:String对象的内容不可改变!   在调用诸如String对象的replace()等方法时,不是在原Sting对象的基础上改变对象内容,而是创建了一个新的String对 ...

  6. java String 中 intern方法的概念

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

  7. 深入理解java String 及intern

    一.字符串问题 字符串在我们平时的编码工作中其实用的非常多,并且用起来也比较简单,所以很少有人对其做特别深入的研究.倒是面试或者笔试的时候,往往会涉及比较深入和难度大一点的问题.我在招聘的时候也偶尔会 ...

  8. 通过反编译深入理解Java String及intern

    一.字符串问题 字符串在我们平时的编码工作中其实用的非常多,并且用起来也比较简单,所以很少有人对其做特别深入的研究.倒是面试或者笔试的时候,往往会涉及比较深入和难度大一点的问题.我在招聘的时候也偶尔会 ...

  9. java String的intern()方法

    intern()方法用于将字符串对象加入常量池中. public native String intern(); intern()方法返回的是一个常量池中的String对象(即常量池中某个String ...

随机推荐

  1. CodeForces 1200F

    题意略. 思路: 如果是问一下然后搜一下,那必然是不现实的.因此我们要预处理出所有的答案. 我们令mod = lcm(m1,m2,...,mn).可知,在任意一点,我们挑选两个不同的数c1.c2,其中 ...

  2. Java IO体系之RandomAccessFile浅析

    Java IO体系之RandomAccessFile浅析 一.RandomAccessFile综述: 1.1RandomAccessFile简介 RandomAccessFile是java Io体系中 ...

  3. Python 内存分配时的小秘密

    Python 中的sys 模块极为基础而重要,它主要提供了一些给解释器使用(或由它维护)的变量,以及一些与解释器强交互的函数. 本文将会频繁地使用该模块的getsizeof() 方法,因此,我先简要介 ...

  4. Leetcode之回溯法专题-39. 组合总数(Combination Sum)

    Leetcode之回溯法专题-39. 组合总数(Combination Sum) 给定一个无重复元素的数组 candidates 和一个目标数 target ,找出 candidates 中所有可以使 ...

  5. 堆、栈、内存分配、==、equals、hashcode详解(转载)

    问题的引入: 问题一:String str1 = "abc";String str2 = "abc";System.out.println(str1==str2 ...

  6. 2019nc#10

    题号 标题 已通过代码 题解/讨论 通过率 团队的状态 A Blackjack 点击查看 背包DP 32/109 补好了 B Coffee Chicken 点击查看 进入讨论 738/2992  通过 ...

  7. zoj 3724 树状数组经典

    问题:n个点,对于每个点i,都有一条连向i+1的有向边,另外有m条其他的有向边,有q个询问(u,v)求u到v的最短路   将m条有向边和q个询问对所表示的点对一起排序,(u,v)u大的排前,u一样的v ...

  8. CF - 1111D Destroy the Colony DP

    题目传送门 题意: 这个题目真的是最近遇到的最难读. 有一个长度n的字符串,每一位字符都代表的是该种种类的敌人. 现在如果一个序列合法的话,就是同一种种类的敌人都在字符串的左半边或者右半边. 现在有q ...

  9. 云原生生态周报 Vol. 19 | Helm 推荐用户转向 V3

    作者| 禅鸣.忠源.天元.进超.元毅 业界要闻 Helm 官方推荐用户迁移到 V3 版本 Helm 官方发布博客,指导用户从 v2 迁移到 v3,这标志着官方开始正式推进 helm 从 v2 转向 v ...

  10. getMeasuredHeight()与getHeight() 以及MeasureSpec.getSize()

    getMeasuredHeight()返回的是原始测量高度,与屏幕无关,getHeight()返回的是在屏幕上显示的高度.实际上在当屏幕可以包裹内容的时候,他们的值是相等的,只有当view超出屏幕后, ...