String常量池

JVM-String常量池与运行时常量池 Start with JVM 先分析一波常量池-Constant Pool 阅读详情

看《深入理解Java虚拟机》时发现一段有意思的代码:

//jdk 1.8
    String str1=new StringBuilder("计算机").append("软件").toString();
    System.out.println(str1.intern()==str1);//true
    String str2=new StringBuilder("ja").append("va").toString();
    System.out.println(str2.intern()==str2);//false

这段代码在jdk1.6中运行得到两个false,因为jdk1.6的intern()方法将首次出现的字符串实例复制到常量池中并返回该实例的引用,而该引用与原字符串的引用(堆中的引用)不同所以得到false,jdk1.7之后,对于第一次出现的字符,intern()将位于堆中的引用复制到常量池中,之后返回的是这个引用,所以上文str1.intern()==str1得到的是true。而str2.intern()==str2得到的却是false,这是因为”java”字符串已经在StringBuilder.toString()前存入常量池了。换成其他字符得到的就是true了。

String str3=new StringBuilder("jaaaaaa").append("va").toString();
        System.out.println(str3.intern()==str3);//true

关于常量池的详细理解参见链接
http://blog.youkuaiyun.com/xsf50717/article/details/47339415

http://book.51cto.com/art/201202/317488.htm

将其中的总结摘抄如下,并做一些补充:
1. 单独使用”“引号创建的字符串都是常量,编译期就已经确定存储到常量中。
2. 使用new String(“”)创建的对象会存储到heap中,是运行期新创建的,如果常量池中没有,常量池也存放一份。所以new String()会创建两个或一个对象。
3. 使用只包含常量的字符串连接符如”aa” + “aa”创建的也是常量,编译期就能确定,已经确定存储到常量池中。
4. 使用包含变量的字符串连接符如”aa” + s1创建的对象是运行期才创建的,存储在heap中,但常量池不会存放该对象。

Java中String和字符串常量池 本文简单讲解Java中那些String引用和字符串常量池的关系 什么是String 什么是字符串常量池 String 根据源码可知,字符串String对象的底层是char[]数组来存储数据,也就是String对象中包括了char[]数组对象。 public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /** The value is used for 阅读详情

相关推荐

JVM中的String类型对象以及常量池

文章目录String类型对象常量池静态常量池和动态常量池的关系以及区别字符串常量池(string pool): String类型对象 String str = "abc"; 在JVM 中创建了几个string对象? 通过打开idea 的debug,中的memory。 发现char[]和string 各创建了一个。所以,在JVM中创建了1个string 对象(在方法区的常量池中创建了一个字符串对象。),两个oop对象(c++中对应的对象,一个是string对象对应的oop,一个是数组对应的oop)。 St

439

part3 jdk17新特性详解

10.EdDSA签名算法(爱德华兹曲线数字签名算法):Edwards-Curve Digital Signature Algorithm。垃圾回收stop the world小于10毫秒,堆内存可以设置很大,甚至是T级别的,减少gc的次数。密封类的优点:1.更加安全 ,避免不必要的继承;2.更加可控,可以限制类的包范围。​ 优点:ZGC吞吐量高,性能高,低延迟 相对jdk8/11。​ 使用方法: -xx:+useZGC。​ jdk8/11默认是 G1垃圾回收器。

工匠精神coding,终生学习 1478

从零到一:在K210上实现YOLO模型在线训练与部署全流程

本文详细介绍了在K210芯片上实现YOLO模型在线训练与部署的全流程,涵盖数据采集、模型优化、量化转换及内存管理等关键环节。通过实战案例和代码示例,帮助开发者高效利用K210的超低功耗特性与YOLO模型的实时检测能力,适用于边缘计算和物联网应用场景。

weixin_29094539的博客 350

六、接口,lambda表达式和内部类

一、接口   在 JavaSE 5.0 中,Comparable 接口已经改进为泛型类型。 public interface Comparable { int compareTo(T other) ; // parameter has type T } 例如,在实现 Comparable 接口的类中, 必须提供下列方法 int compareTo(Employee other)   接口中的...

王文萱的博客 394

碳纳米管NRAM:突破5纳米制程的下一代存储技术

在半导体存储领域,非易失性存储器和随机存取存储器是两大基础技术方向。传统DRAM速度快但断电易失,NAND Flash非易失但写入慢、寿命有限,两者在先进制程下都面临物理极限挑战。碳纳米管作为一种新型纳米材料,凭借其优异的导电性、机械强度和尺寸微缩潜力,为存储技术革新提供了物理基础。基于碳纳米管的NRAM技术,通过控制纳米管间的可逆接触实现电阻状态切换,兼具DRAM级速度和Flash的非易失性,同时具备近乎无限的擦写寿命和出色的CMOS工艺兼容性。这项技术不仅能满足5纳米以下制程的存储需求,在数据中心缓存、

weixin_42576804的博客 427

窥秘Windows 10:SAM密码破解

Windows 10作为广受欢迎的操作系统,拥有一套强大的安全措施来保护用户账号和数据安全。然而,有时候我们需要了解更多关于密码破解的知识,以加强我们的防护措施。本文将深入探讨如何突破Windows 10的SAM密码,以便更好地了解密码安全性并加强系统的保护。

Sgirll的博客 6844

string读入输出

#include &lt;iostream&gt; #include &lt;stdio.h&gt; #include &lt;string.h&gt; using namespace std; int main() {     string a[100];     a.resize(100); //需要预先分配空间     scanf("%s", &amp;a[0]);     printf("...

to_more_excellent的博客 536

CAN-do-paser:Java开发的CAN总线数据帧解析库

CAN总线数据帧使用DBC文件信息解析为物理量,基于Java开发的数据解析工具。

佳瑞的博客 1134

String类常用

C++中substr函数的用法   string s("12345asdf");string a = s.substr(0,5);     //获得字符串s中从第0位开始的长度为5的字符串输出结果为0123450. 用途:一种构造string的方法1. 形式:s.substr(pos, n)2. 解释:返回一个string,包含s中从pos开始的n个字符的拷贝(pos的默认值是0,n的默认值是s....

qq_24950821的博客 1553

02-基于ART-PI开发板创建USB CDC 虚拟串口设备

本例在ART-PI开发板上,基于RT-Thread 5.0,5虚拟了一个USB32 CDC串口设备。

arm_fan的专栏 1886

数据服务:数据服务框架Magic-API 介绍及实践

接口快速开发框架 基于Java的接口快速开发框架,编写接口将通过magic-api提供的UI界面完成,自动映射为HTTP接口,无需定义Controller、Service、Dao、Mapper、XML、VO等Java对象即可完成常见的HTTP API接口开发 。在线页面快速开发平台 基于 vue 的在线页面快速开发平台,主要把所有的 vue 代码都改为在线配置,最终获得一个 json 格式的页面新一代爬虫平台 基于Java实现的新一代爬虫平台,以图形化方式定义爬虫流程,不写代码即可完成爬虫。今天给大家安利一

GIS摆渡人 2063

more命令用法举例

more命令 1.命令格式:more [-dlfpcsu ] [-num ] [+/ pattern] [+ linenum] [file ... ]  2.命令功能: 2.1 more命令功能类似cat: cat命令是整个文件的内容从上到下显示在屏幕上, more会以一页一页的显示方便使用者逐页阅读 2.2 more可以按页来查看文件的内容,还支持直接跳转行等功能 2.3 按空白键(space...

qq646748739的专栏 7405

[DevExpress]GridControl拖拽行记录排序

DevExpress的GridControl拖拽行记录排序需求效果代码 需求 现在用户对按钮点击排序不满意了, 希望拖拽排序。 重载GridControl控件,对MouseMove、MouseDown、MouseUp事件修改一下。 效果 代码 using System; using System.Drawing; using System.Windows.Forms; using xiaoid.forms; using System.Data; using System.Collections.Gener

德仔 1562

String 与 常量池

String 与 常量池问题引入先看段代码String a = "this is it"; String a2 = "this is it"; String b = new String("this is it"); String c = "this " + "is it"; System.out.println(a == a2); // console输出 true System.out.prin

FIRE_TRAY的Android之路 1374

Autosar PWM模块的配置和使用

在上面的代码中,我们首先配置了PWM的初始化参数,包括频率和分辨率。GPIO Driver:由于PWM信号需要输出到特定的引脚上,因此我们还需要使用GPIO驱动程序来控制引脚的状态。通过合理配置和应用PWM模块,我们可以实现对汽车电子系统中各种功能的精确控制,从而提高汽车性能和用户体验。在实际应用中,我们可以根据需要进行更多的配置和调整,以实现灵活的PWM控制。PWM Driver:这是主要的PWM驱动程序,负责产生PWM信号并输出到相应的引脚上。接下来,我们需要配置PWM模块的参数。

TcData的博客 682

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

String 常量池

String s1 = "hello"; String s2 = "hello"; String s3 = "he" + "llo"; String s4 = "hel" + new String("lo"); System.out.println(s1==s2);//true System.out.pr...

冒旭的博客 355

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Java基础之String与Integer常量池

String常量池 String类型是对象类型,但它是一种非常特殊的类型。因为String类型使用的非常多,因此Java标准中引入了String常量池,我估计引入常量池的一个目的是节省节省字符串占用的内存。 常量池对String变量的影响 首先来看一段代码 public static void main(String[] args) { String s1 = "Hello"; String s2 = "Hello"; String s3 = "Hel" + "lo"; St

weixin_44517209的博客 918

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

从字符串到常量池,一文看懂String类

从字符串到常量池,一文看懂String类设计 从一道面试题开始 看到这个标题,你肯定以为我又要讲这道面试题了 // 这行代码创建了几个对象? String s3 = new String("1"); 是的,没错,我确实要从这里开始 这道题就算你没做过也肯定看到,总所周知,它创建了两个对象,一个位于堆上,一个位于常量池中。 这个答案粗看起来是没有任何问题的,但是仔细思考确经不起推敲。 如果你觉得我说的不对的话,那么可以思考下面这两个问题 你说它创建了两个对象,那么这两个对象分别是怎样创建的呢?我们回

做一个认真的程序员 3104

String类和常量池

String类和常量池 String对象的创建方式 String str1 = "abc"; String str2 = "abc"; // 此时str1 == str2,因为他们都是常量池中的abc String str3 = new String("abc") // 这会在堆中创建一个abc新对象,此时str1≠str3 第一种:直接赋值,若字符串存在于常量池中,会直接引用常量池中字符串...

zzzzzzyn的博客 381

字符串常量池和创建String的关系

结合上面这篇文章所讲,如果是直接赋值这种方式创建的字符串对象,只会在常量池中。返回的也只是字符串常量池中的对象引用!

YDXD_C的博客 857

Class 常量池、String Pool、运行时常量池

令人头大的字符串常量!

松生的博客 434
上一篇: 二维数组的作为函数形参的地址传递
下一篇: Spring学习笔记-IOC
more_try
博客等级 码龄11年 13粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值