java中关于string类和常量池的一点猜想
public class StringTest {
/**
* @param args
*/
public static void main(String[] args) {
test1();
test2();
}
private static void test2() {
// TODO Auto-generated method stub
String s1 = "kvill";
String s2=s1.intern();
System.out.println( s1==s1.intern() );
System.out.println( s1+" "+s2 );
System.out.println( s2==s1.intern() );
}
result:
true
kvill kvill
true
private static void test1() {
// TODO Auto-generated method stub
String s1 = new String("kvill");
String s2=s1.intern();
System.out.println( s1==s1.intern() );
System.out.println( s1+" "+s2 );
System.out.println( s2==s1.intern() );
}
result:
false
kvill kvill
true
/**
* 说明:从上面的结果可以看出,针对语句string str = "abc"而言,它在编译期的时候就会检查常量池,是否有“abc”这个字符串是否存在,
* 不存在就添加进去,存在就不创建对象的引用(引用1),这种方式创建的字符串对象在底层可能也是以类“String”的方式来创建对象;
* 针对于语句String str = new String("abc")来说,在编译期是不会创建对象的,而且,到了运行期,当执行了s2 = s1.intern()
* 方法后,s1!=s2说明,new String()这个对象存储的其实不是“abc”这个常量,而是“abc”这个常量的引用(引用2)
*
*
* intern方法将返回常量字符串的引用(引用1),可以看出这里的“常量”字符串引用和string的引用(引用2)是不同的
*
*
* 猜想:我想为什么会出现上面的情况,那是因为new string中存储的可能是“abc”这个常量的“真身”,到了运行期的某个时期,JVM就会将
* 这个真身“复制”(可能不是复制)到常量池中,然后再销毁这个“真身”,这时候,他们指向的就是一个对象引用了。
*/
不过总觉得想到了,却还差点什么,希望大神们看看,给我一些新的提示!
最新文章
- 简单理解Socket
- NodeJs教程(介绍总结!)终于在网上找到一个靠谱点的了T_T
- hdu-acm steps Common Subsequence
- hdu A strange lift
- X86平台下嵌入式linux触摸屏解决方案(usb触摸屏控制器+完美校准方案+触摸屏QTE开发环境搭建)
- R语言绘图002-页面布局
- hosts文件配置作用
- java的各个队列之间的联系和区别是什么
- 《Java并发编程实战》第二章 线程安全性 读书笔记
- Coder的利器
- 1.9 分布式协调服务-Zookeeper(二)
- 【.NET Core项目实战-统一认证平台】第十章 授权篇-客户端授权
- Kubernetes 学习1 k8s架构概述
- 51 Nod 1256 乘法逆元(数论:拓展欧几里得)
- [PA2014]Fiolki
- Docker之 默认桥接网络与自定义桥接网卡
- python技巧 计算字符串中字母出现的次数并取出最大
- element UI 导航栏根据路径来确定默认选中
- linux md5sum命令
- [Coci2015]Kamp
热门文章
- FastApi下载文件
- 纯前端实现词云展示+附微博热搜词云Demo代码
- 尖端之作看逐浪-Zoomla!逐浪CMS python版发布
- Arduino uno r3 使用 ESP8266 UART-WiFi 透传模块
- [bzoj1385]Division expression
- 【JavaSE】finally块不被执行的情况总结
- 洛谷 P7156 - [USACO20DEC] Cowmistry P(分类讨论+trie 树上 dp)
- 洛谷 P5280 - [ZJOI2019]线段树(线段树+dp,神仙题)
- python版的MCScan绘图
- [R] 添加误差棒的分组折线图:geom_path: Each group consists of only one observation. Do you need to adjust the...