java if判断里的“==”和equals(),与字符串相等判断有关。

 我来答
萧芙老婷
2019-05-01 · TA获得超过3.6万个赞
知道大有可为答主
回答量:1.4万
采纳率:26%
帮助的人:789万
展开全部
这个涉及到
Java
的内存管理。Java
字符串分两种情况,静态的和非静态的。只要出现引号
"xxx"
这样的形式就是静态的。Java
出于效率考虑,把静态的字符串和基本数据类型一起放在内存栈区,而不是放在堆区。这是一个特例而已,一般
Java
对象都存在堆区的。
放在栈区的数据是唯一的,不会重复,因此可以用
==
来比较。例如
"123"
==
"123"
这是
true,这本质上只生成了一个对象。但是第一种情况,你的变量是不确定的,就不是静态字符串,只能被分配到堆区。堆区的对象可能会出现内容重复,就不能用
==
来判断,得用
equals
方法。
还有一种情况:new
String(123)
==
new
String(123)
这样就是
false,因为
new
出来的对象是放在堆区的。只能用
equals
来判定内容是否相同。
宁秀芳涂辰
2019-05-03 · TA获得超过3.7万个赞
知道大有可为答主
回答量:1.2万
采纳率:34%
帮助的人:1097万
展开全部
判断方法写的有些问题,你要判断用户输入的账号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两个变量就没有用到不是么?
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式