当前位置: 技术问答>java相关
String类的问题
来源: 互联网 发布时间:2015-01-14
本文导语: 我在bean里有两个方法(String)getPassword()和(String)getPassword1(),前一个是接受密码,后一个是接受确认密码。 结果我很困惑:getPassword()和getPassword1()的值是一样的(我全部输入的abcd),可用= =比较的结果是不一样的。用c...
我在bean里有两个方法(String)getPassword()和(String)getPassword1(),前一个是接受密码,后一个是接受确认密码。
结果我很困惑:getPassword()和getPassword1()的值是一样的(我全部输入的abcd),可用= =比较的结果是不一样的。用compareTo方法比较的结果也是不一样的!用equals方法比较的结果是一样的。我调试了一下。内容如下:
/*为方便观察而在jsp页面里定义的变量*/
String a="abcd";
String b=getPassword();
String c=getPassword1();
boolean d=(b==c);
/*调试时Jbuilder5给出的结果*/
a:value char[]=char[4] ={'a','b','c','d'}
b:value char[]=char[16]={'a','b','c','d','u0000',.......'u0000'}
c:value char[]=char[16]={'a','b','c','d','u0000',.......'u0000'}
d:false
///////////////////////////////////////////////////////////////////
我最后没办法,有b.equals(c),结果是true.
请大家谈谈看法,为什么用compareTo()和==都认为不等?还有为什么a和b是不一样的长度?java究竟怎么编译的?
结果我很困惑:getPassword()和getPassword1()的值是一样的(我全部输入的abcd),可用= =比较的结果是不一样的。用compareTo方法比较的结果也是不一样的!用equals方法比较的结果是一样的。我调试了一下。内容如下:
/*为方便观察而在jsp页面里定义的变量*/
String a="abcd";
String b=getPassword();
String c=getPassword1();
boolean d=(b==c);
/*调试时Jbuilder5给出的结果*/
a:value char[]=char[4] ={'a','b','c','d'}
b:value char[]=char[16]={'a','b','c','d','u0000',.......'u0000'}
c:value char[]=char[16]={'a','b','c','d','u0000',.......'u0000'}
d:false
///////////////////////////////////////////////////////////////////
我最后没办法,有b.equals(c),结果是true.
请大家谈谈看法,为什么用compareTo()和==都认为不等?还有为什么a和b是不一样的长度?java究竟怎么编译的?
|
JAVA里面当两个对象进行比较时,应该用equals,==只有当两个变量指向同一对象时才返回TRUE……
这个问题书里面都有讲的,以前也有很多人问过了……
至于长度为什么不一样,这要看你的代码才知道了……
这个问题书里面都有讲的,以前也有很多人问过了……
至于长度为什么不一样,这要看你的代码才知道了……
|
这是java的机制造成的,
正如ender所说的,当两个对象进行比较时,应该用equals,==只有当两个变量指向同一对象时才返回TRUE,==只是比较它们的reference的值,
长度不一样是因为,你的赋值方式不一样,String a="abcd";的话它把它放在一个字符串池中,而String b=getPassword();它会把它放在对象中,产生的机制都不同,难免长度不一样了
正如ender所说的,当两个对象进行比较时,应该用equals,==只有当两个变量指向同一对象时才返回TRUE,==只是比较它们的reference的值,
长度不一样是因为,你的赋值方式不一样,String a="abcd";的话它把它放在一个字符串池中,而String b=getPassword();它会把它放在对象中,产生的机制都不同,难免长度不一样了
|
equals比较对象内容,==比较对象地址
|
yes,
equals比交对象内容,
==比较地址
答得很好
equals比交对象内容,
==比较地址
答得很好
|
==比较对象地址?
如果比较的是Object的话,比较引用,
如果比较的是基础类型(int,char,...),则直接比较值。
如果比较的是Object的话,比较引用,
如果比较的是基础类型(int,char,...),则直接比较值。