新闻正文

Re: 为什么main的参数必须用equals比较呢?

来源:JAVA天堂  JAVA学习者  2007-5-6 00:34:09 网友评论 0 条 字体:[ ] ~我要投稿!
, 站内信件
这确实是一个好问题。弄清楚这个问题,对于理解java里实体和实体引用的概
念很有帮助。
在这里"=="比较的只是两个实体的引用,相当于C/C++里的指针(不象C++里的
引用,因为java里引用可以为null,而C++里的引用不行,所以说java里的引用
更象C/C++里的指针。),也就是说比较的是两个"指针","指针"是什么?内存地址!
本质上说这是比较的两个内存地址。而equals()比较的才是两个实体的内容。
那为什么该例子中s1==s2的结果是true呢?那是因为s1和s2都是字符串"xyz"
的引用(一般的编译器都做了优化,保证相同内容的字符串常量只有一份copy,
否则s1!=s2),也就是说同一个实体的引用,所以相等。同样s[0],s[1]也是对这
同一个实体的引用。
twin和s1是两个不同实体的引用,twin==s1的结果当然是false,但是这两个实
体的内容是相同的,equals()当然返回true。
下面是个更能说明问题的例子。
public class TestString
{
public static void main(String[] args){
String s1 = "xyz";
String s2 = "xyz";
String s[]= new String[2];
s[0]="xyz";
s[1]="xyz";
if (s1 == s2)


System.out.println("正常");
if (s1==s[1])
System.out.println("正常");
if (s1.equals(s[1]))
System.out.println("正常");
String twin="xy";
twin += "z";
if(twin==s1)
System.out.println("正在格式化硬盘,烧毁显示器,CPU...");
if(twin.equals(s1))
System.out.println("正常");
}
}
【 在 acidgrape (酸葡萄) 的大作中提到: 】
: public class TestString{
: public static void main(String[] args){
: String s1 = "xyz";
: String s2 = "xyz";
: String s[]= new String[2];
: s[0]="xyz";
: s[1]="xyz";
: if (s1 == s2)
: System.out.println("Line 4");
: if (s1==s[1])
: .................(以下省略)

有的程序死了,却还活着;有的程序活着,却已经死了。


收藏到ViVi   收藏此页到365Key
上一篇: 关于J2ME(转自javaunion)参考站点
下一篇:JSP和JSF双剑合并 打造完美Web应用
用户名:新注册) 密码: 匿名评论 [所有评论]
评论内容:不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
本栏搜索
  • Google
   网站首页 -  网站地图 -  技术学习 -  网站投稿 -  帮助中心
Copyright 2003-2008 www.javah.net All Rights Reserved
2008 如果你喜欢本站 请收藏本站 并推荐给你的朋友一起分享