A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 你的昵称 中级黑马   /  2016-7-11 07:58  /  431 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


原来,程序在运行的时候会创建一个字符串缓冲池当使用 s2 = "Monday" 这样的表达是创建字符串的时候,程序首先会在这个String缓冲池中寻找相同值的对象,在第一个程序中,s1先被放到了池中,所以在s2被创建的时候,程序找到了具有相同值的 s1
将s2引用s1所引用的对象"Monday"
第二段程序中,使用了 new 操作符,他明白的告诉程序:"我要一个新的!不要旧的!"于是一个新的"Monday"Sting对象被创建在内存中。他们的值相同,但是位置不同,一个在池中游泳一个在岸边休息。哎呀,真是资源浪费,明明是一样的非要分开做什么呢?

4 个回复

倒序浏览
惯例!自己先看看!
回复 使用道具 举报
java机制就是这样,没有为什么
回复 使用道具 举报
又受教了,
回复 使用道具 举报
cat73 黑马帝 2016-7-11 23:14:22
报纸
实际上,在 Java8 中,打开一个优化开关后(默认关闭),new 出来的 String 刚开始跟之前的 String 不是一个对象,但是过一段时间,通常是几次 GC 后,你会发现它们变成了同一个对象。。。
开启这个开关的方法是在 JVM 参数中增加这个:-XX:+UseStringDeduplication
所以说,任何时候都不要去依赖这种特性。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马