CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

一个看起来比较简单的问题,会有一个意想不到的结果--------两个变量的比较。

楼主liangyuwei_78(良兄)2006-07-04 16:38:43 在 Java / J2SE / 基础类 提问

 
  class   Class1   {  
   
  String   Var1   =new   String("2222");  
   
  void   Mod1()  
  {  
   
  String   Var1   =   new   String("2222");  
   
  //Var1   =   "2222";  
  //this.Var1   =   "2222";  
   
  if(Var1   ==   this.Var1)  
  {  
  System.out.println("true");  
  }  
  else  
  {  
  System.out.println("false");  
  }  
   
  }  
   
  public   static   void   main(String[]   args)   {  
  //   TODO   自动生成方法存根  
  Class1   class1   =   new   Class1();  
  class1.Mod1();  
   
  }  
   
  }  
  这段代码的执行结果是输出:false   。而将代码中的  
  //Var1   =   "2222";  
  //this.Var1   =   "2222";  
  这两行的注释符去掉,则执行结果是输出:true   。  
   
  那位给咱讲讲。  
   
  问题点数:20、回复次数:4Top

1 楼leafxx(因为音乐,所以自由)回复于 2006-07-04 16:50:15 得分 5

有很多基本概念要搞清楚  
  Mode1里的var是局部变量,而this.var引用的是域变量  
   
  String是final的非可变对象,如果字符串相同的话,多个String引用会共享同一个对象  
   
  而你的代码中String   Var1   =   new   String("222");  
  在Mod1里String   Var1   =   new   String("222");   在内存中又new了一个222的字符串对象出来,虽然完全一样,但却是两个不同的对象  
  应该写成String   var1   =   "222",不需要加上new,这样var在编译期就会共享同样的字符串  
   
  还有比较字符串应该使用equals而不是==,==只能比较是否是同样的引用Top

2 楼kevinliuu()回复于 2006-07-04 16:50:27 得分 5

就是这样的  
   
  首先   ==   比较的是不是内容,比较的是句柄是否指向同一地址  
   
  第一种情况下,this.Var1指向的是成员变量的地址,而Mod1中的Var1是一个new出来的局部变量地址肯定不相同,因此为fasle  
   
  第二种情况,Var1   =   "2222";   this.Var1   =   "2222";   实际上是指向了同一地址,也就是说第二种情况实际上堆中只有一个"2222"的字符串,局部变量Var1和成员Var1都指向它,而第一种情况,堆中有两块内容,也就是有两个"2222"的字符串空间  
  Top

3 楼leafxx(因为音乐,所以自由)回复于 2006-07-04 16:51:33 得分 5

更正:第三行,String是非可变类(final   class)Top

4 楼navence(卡西C)回复于 2006-07-04 16:51:59 得分 5

因为new   String了,所以全局变量Var1   不等于局部变量Var1    
  这两行的注释符去掉后,全局变量Var1和局部变量Var1   指向同一地址  
  所以全局变量Var1   等于局部变量Var1    
  Top

相关问题

关键词

得分解答快速导航

  • 帖主:liangyuwei_78
  • leafxx
  • kevinliuu
  • leafxx
  • navence

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo