String常量池问题
jdk 1.8运行以下代码,第一个是true,第二个是false ,第三个是true
String s1 = "aaa" + new String("aaa");
s1.intern();
String s2 = "aaaaaa";
System.out.println(s1 ==s2);//true
String s3 = new String("bbbbbb");
s3.intern();
String s4 = "bbbbbb";
System.out.println(s3 ==s4);//false
char[] ch = {'c','c','c','c','c','c'};
String s5 = new String(ch, 0, 6);
s5.intern();
String s6 = "cccccc";
System.out.println(s5 ==s6);//true
疑惑点:字符串按拼接和直接new的不同形式创建对象,查看第一种编译的class字节码,发现是通过StringBuilder.append实现,最后的toString,省去中间过程就类似与第三种情况,这几种情况内存是怎么变化的呢,为什么第二个是false另外两个是true
String s1 = "aaa" + new String("aaa");
s1.intern();
String s2 = "aaaaaa";
System.out.println(s1 ==s2);//true
String s3 = new String("bbbbbb");
s3.intern();
String s4 = "bbbbbb";
System.out.println(s3 ==s4);//false
char[] ch = {'c','c','c','c','c','c'};
String s5 = new String(ch, 0, 6);
s5.intern();
String s6 = "cccccc";
System.out.println(s5 ==s6);//true
疑惑点:字符串按拼接和直接new的不同形式创建对象,查看第一种编译的class字节码,发现是通过StringBuilder.append实现,最后的toString,省去中间过程就类似与第三种情况,这几种情况内存是怎么变化的呢,为什么第二个是false另外两个是true
...全文
相关推荐
JAVA面试题String产生了几个对象
这个问题是很多Java开发者面试中常见的问题,本文将通过示例代码详细介绍String s = new String("xyz");产生了几个对象。首先,需要了解Java中的字符串常量池的工作原理。
Java中的字符串常量池详细介绍
关于字符串常量池中存储的是引用还是对象的问题,实际上,Java的字符串常量池存放的是对象的引用,而不是对象本身。对象仍然在堆内存中创建。
string常量池和intern_韩雅茹Java系列2021.pdf
字符串常量池的设计思想是为了解决字符串的频繁创建问题,减少内存开销和提高性能。在Java中,字符串是不可变的,可以共享运行时实例创建的全局字符串常量池中。
string中的常见问题
### String中的常见问题在Java编程语言中,`String` 类型是最常用的数据类型之一,它代表了不可变的字符序列。
Java String对象的经典问题
### Java String对象的经典问题#### 一、String 类与对象机制概述在Java中,`String`类是一个非常重要的类,它提供了丰富的功能用于处理文本数据。


Java SE
