请问:
下面两种定义字符串的形式都有哪些不同呢??
什么情况下使用第一种,什么情况下使用第二种?
String s1 = "abc ";
String s2 = new String( "abc ");
问题点数:20 回复次数:14 显示所有回复显示星级回复显示楼主回复
woos
等 级:
发表于:2007-11-03 12:42:301楼 得分:0
第二种是构造一个新的String,第一种是把字符串内容放在了对象池中,具体我也不太清楚.
这段代码是引用koj5201314 的,我觉得不错.
Java code
public static void main(String[] args) {
String str1 = "Hello World! ";
String str2 = "Hello World! ";
System.out.println(str1.hashCode());
System.out.println(str2.hashCode());
// 比较字符串的值
System.out.println(str1.equals(str2));// 输出true
// 比较两个字符串的hashcode,默认是内存地址
System.out.println(str1 == str2);// 输出true
String str3 = "Hello World! ";
String str4 = new String( "Hello World! ");
System.out.println(str3.hashCode());
System.out.println(str4.hashCode());
// 比较字符串的值
System.out.println(str3.equals(str4));// 输出true
// 比较两个字符串的hashcode,默认是内存地址
System.out.println(str3 == str4);// 输出false
}
控制台结果:
-969099747
-969099747
true
true
-969099747
-969099747
true
false
lumingvy
刀疤刘
等 级:
发表于:2007-11-03 13:06:582楼 得分:0
<第二种是构造一个新的String,第一种是把字符串内容放在了对象池中>
是什么意思啊,对象池是啥???
cl55
CL
等 级:
发表于:2007-11-03 13:34:153楼 得分:0
String s1 = "abc ";
在java程序中,只要有string literal,compiler 就会创建一个string object。
LZ可以自已去看看。
http://java.sun.com/docs/books/tutorial/java/data/strings.html
johnsoncr
千里之行,始于“结贴”
等 级:
发表于:2007-11-03 13:40:114楼 得分:0
http://hi.baidu.com/johnsoncr/blog/item/aa345bf9590c2e5a252df202.html
看下这里的
leawen
等 级:
发表于:2007-11-03 13:58:325楼 得分:0
第一个是把变量 "abc "赋给对象s1;
第二个是重新创建一个对象,把第一个的对象值赋个新创建的对象
sharpyuce
蠢人学编程
等 级:
发表于:2007-11-03 15:28:296楼 得分:0
嘿嘿 这个问题 是个很著名的面试题来着的:
String s = "shabi ";
String ss = new String( "sb ");
(2条代码同时出现)
第一条代码 生成几个对象:
第2条代码 生成几个对象
答案:1;2;
至于为什么,我就不解释了,论坛上有好多解释的帖子,自己去找。。
补充:
如果是这样:
String s = "shabi ";
String ss = new String( "shabi ");
(2条代码同时出现)
这样就都是1个对象了
lightbring
御剑
等 级:
发表于:2007-11-03 17:51:047楼 得分:0
单独出现时:
String s1 = "abc ";
生成一个对象,在栈里
String s2 = new String( "abc ");
生成两个对象,栈里一个,堆里一个(new的作用是开辟一片新的内存),
同时出现时
String s1 = "abc ";
生成一个对象,在栈里
String s2 = new String( "abc ");栈里的“abc”已经有了,所以不需要在 创建,就只在堆里创建了一个对象
lumingvy
刀疤刘
等 级:
发表于:2007-11-03 18:52:568楼 得分:0
7楼所说的 < 生成两个对象,栈里一个,堆里一个 >
栈里也可以存放对象吗,我听老师讲过说对象生死在堆里的啊!
zbl0201
等 级:
发表于:2007-11-03 20:21:109楼 得分:0
对呀 对象再堆立面啊
希望进一步讲解
tuoxie007
拖鞋
等 级:
发表于:2007-11-03 20:36:5610楼 得分:0
后一种是构造了一个Stirng对象
前一种只是定义了一个String类型的变量 是不能当对象处理和使用的
前一种就可以
tuoxie007
拖鞋
等 级:
发表于:2007-11-03 20:39:3711楼 得分:0
对象是在堆里
栈里放的是对象的引用
有几种寻址方式 分别适用在不同的场合
具体我也不太记得清除
safewolf
西瓜瓤
等 级:
发表于:2007-11-03 20:53:5112楼 得分:0
这两个方法应该是一样的,使用上应该没有区别吧
就跟i = i + 1;跟i ++;一样...没区别
zbl0201
等 级:
发表于:2007-11-03 21:30:0513楼 得分:0
对象是在堆里
栈里放的是对象的引用
有几种寻址方式 分别适用在不同的场合
具体我也不太记得清除
-----------------------
对象的引用也叫对象啊?
dracularking
English Java Group:1306030 Welcome E-Javaers
等 级:
发表于:2007-11-03 21:34:5814楼 得分:0
生成的对象数是不一样 但觉得不会有啥实用区别