您的位置:首页 > 编程语言 > Java开发

JAVA字符串池问题/String对象创建问题

2017-09-17 00:39 453 查看
在Java语言中,所有的常量将在编译后的.class字节码文件中开有一个常量区,在运行时,将在内存中占用这么一个内存区。JAVA字符串池是常量区的部分;

字符串池存放着程序中创建的所有字符串常量;任何时候创建字符串常量系统都会搜索字符串池,查看是否存在该字符串常量。

String对象的创建

1、创建一个String类的实例

String name = "myname";
String hisname = "yourname";


先在字符串池中查找“myname”和“yourname”两个字符串,这里存在“myname”,所以在字符串池中只新创建字符对象“yourname”;



2、new一个String对象

String name = new String("myname");
String hisname = new String("yourname");


先执行上面一步,新创建了“yourname”对象;new操作符时,将字符串池中的“myname”和“yourname”各传一个副本(即赋值一份)到 heap(堆栈)中,新建两个对象。一共新创建三个对象。



s =“apple”+“pen”;将产生几个对象?

在java中,两个字符串常量将直接连接,不会产生多余常量对象,所以只新生成一个常量对象“applepen”。

s = “apple” + new String(“hahaha”) + “pen”将产生几个对象?

这种情况下,只会产生最后的“applehahahapen”,不会生成中间的“applehahaha”;所以这里新生成两个对象“hahaha”和“applehahahapen”。

因为sun的javac把上面代码编译成了Java代码:
new StringBuilder("a").append(new String("b")).append("c").toString()
真正遵循规范的“+”要这么写:
"a".concat("b").concat("c") 这样才会产生"ab"这个字符串
所以实际应用中,完全不要担心"a" + "b" + "c"这样的写法
但要注意类似下面的东西:
for (String x = ...)
s = s + x;
这个每次循环都会生成一个字符串,这时改成s.append(x)才好


s=“hello”;s = s+“hahaha”;将产生几个对象?

参照第二个例子,这里生成三个对象:“hello”、“hahaha”、“hellohahaha”。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 对象 字符串池