java if判断里的“==”和equals(),与字符串相等判断有关。
2个回答
展开全部
这个涉及到
Java
的内存管理。Java
字符串分两种情况,静态的和非静态的。只要出现引号
"xxx"
这样的形式就是静态的。Java
出于效率考虑,把静态的字符串和基本数据类型一起放在内存栈区,而不是放在堆区。这是一个特例而已,一般
Java
对象都存在堆区的。
放在栈区的数据是唯一的,不会重复,因此可以用
==
来比较。例如
"123"
==
"123"
这是
true,这本质上只生成了一个对象。但是第一种情况,你的变量是不确定的,就不是静态字符串,只能被分配到堆区。堆区的对象可能会出现内容重复,就不能用
==
来判断,得用
equals
方法。
还有一种情况:new
String(123)
==
new
String(123)
这样就是
false,因为
new
出来的对象是放在堆区的。只能用
equals
来判定内容是否相同。
Java
的内存管理。Java
字符串分两种情况,静态的和非静态的。只要出现引号
"xxx"
这样的形式就是静态的。Java
出于效率考虑,把静态的字符串和基本数据类型一起放在内存栈区,而不是放在堆区。这是一个特例而已,一般
Java
对象都存在堆区的。
放在栈区的数据是唯一的,不会重复,因此可以用
==
来比较。例如
"123"
==
"123"
这是
true,这本质上只生成了一个对象。但是第一种情况,你的变量是不确定的,就不是静态字符串,只能被分配到堆区。堆区的对象可能会出现内容重复,就不能用
==
来判断,得用
equals
方法。
还有一种情况:new
String(123)
==
new
String(123)
这样就是
false,因为
new
出来的对象是放在堆区的。只能用
equals
来判定内容是否相同。
展开全部
判断方法写的有些问题,你要判断用户输入的账号user和密码pass对不对,就不能拿自己定义的变量去比较,
if(user.equals(a.getuser())&&pass.equals(a.getpass()))
return
true;
else
return
false;
否则调用这个方法时a.panduan(a)就相当于user.equals(user),是自己和自己的比较,肯定返回true!
建议修改:
public
boolean
panduan(string
user,string
pass,admin
a)
{
if(user.equals(a.getuser())&&
pass.equals(a.getpass()))
return
true;
else
return
false;
}
这时把user
和pass变成panduan函数的参数,而不是自己定义的变量。
调用的时候是a.panduan(n,p,a);n和p是你输入的账号和密码。
这里你肯定也注意到了,照你之前的做法,n和p两个变量就没有用到不是么?
if(user.equals(a.getuser())&&pass.equals(a.getpass()))
return
true;
else
return
false;
否则调用这个方法时a.panduan(a)就相当于user.equals(user),是自己和自己的比较,肯定返回true!
建议修改:
public
boolean
panduan(string
user,string
pass,admin
a)
{
if(user.equals(a.getuser())&&
pass.equals(a.getpass()))
return
true;
else
return
false;
}
这时把user
和pass变成panduan函数的参数,而不是自己定义的变量。
调用的时候是a.panduan(n,p,a);n和p是你输入的账号和密码。
这里你肯定也注意到了,照你之前的做法,n和p两个变量就没有用到不是么?
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询