java string 声明了几个对象??

原创
2010/08/05 13:02
阅读数 644

 

String s = new String("1"+"2");
System.out.println(s);
如题:这个程序中声明了几个对象?

 

我对朋友回答的是3个,朋友说是2个,我先说说我说3个的原因:

String s = new String("1"+"2");
System.out.println(s);
转换如下:
String a = "1";
String b = "2";
String s = new String(a+b);
System.out.println(s);
这里先要整清楚什么是对象、引用和string特性,string帮助文档中已经描述的很详细了,“字符串是常量;它们的值在创建之后不能改变。字符串缓冲区支持可变的字符串。因为 String 对象是不可变的,所以可以共享它们”,这是原话,所以可以进行以上的转化,这样一来就比较清晰了,声明了3个对象,s在堆上,a和b在栈上,事实上s引用了另外的一个栈c(jvm运行起来),c是由a和b创建出来的,关于为什么c会重新开辟内存请注意string的特性,另外也可以对比String和StringBuffer的区别就会明白。按照转化前的分析,在编译成class文件时,1和2是两个常量被编译其中作为入口参数的
展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
1 收藏
0
分享
返回顶部
顶部