新闻正文
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应用