字符串的定义

 请问:
下面两种定义字符串的形式都有哪些不同呢??
什么情况下使用第一种,什么情况下使用第二种?


    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
生成的对象数是不一样   但觉得不会有啥实用区别
 
  
 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值