java && 和 &、|| 和 | 的区别和作用

我在学java网络编程Socket的时候遇到这么个问题


//这是并发的服务端代码,run是实现Runnable接口的方法

public void run() {
try {
System.out.println(s.getInetAddress().getHostAddress());
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
PrintWriter pw = new PrintWriter(s.getOutputStream(), true);
if (br.readLine().equals("123") && br.readLine().equals("aaa")) { //问题出在这里
pw.println("登录成功");
} else {
pw.println("密码错误");
}
s.shutdownInput();
s.shutdownOutput();
s.close();
} catch (
IOException e) {
e.printStackTrace();
}
}
}

当我开启服务端和客户端时,如果客户端输入的代码是

123

aaa

将返回“登录成功”

如果是

123

abc //输入错误的密码

将返回“密码错误”

但是如果是这样呢

456 //帐号密码都是错的

abc

返回的是“null”


我想了很久,发现问题出在这里:

if (br.readLine().equals("123") && br.readLine().equals("aaa")) 

如果使用&&,if的判断可能会只判断一次,也就是“br.readLine.equals("123")”如果为false,那么后面部分的语句将不再执行,而这时候流还没读取完,所以就服务端的getOutputStream没有执行,客户端没收到值,输出自然就为null了

我想到的一个办法就是不使用&&而使用&

即:if (br.readLine().equals("123") & br.readLine().equals("aaa")) 

当流在读取时,如果if第一个判断读到false仍然会继续判断,这样流的读取就可以顺利读完,服务端的输出流也可以正常执行了

总结:&& & || 和 | 会影响到判断语句的判断方式,一般来说,常用&& 和 || 

&& :判断时,如果第一个为true,继续判断第二个,第三个... 如果全部为true,结果为true,如果判断过程中一旦遇到false,将停止判断,因为对于判断是否全部为true的&&来说,只要有一个false,那么后续的判断都没有意义

||:它判断时,只要有一个为true,那么他得出的结果就为true,后续的判断也没意义,如果全为false,那么结果为false

& 和 | :它们的判断结果和&&、|| 没有区别,但在执行时有,也就是如果执行到某一部分即使已经得出结果,它们仍然会继续判断,直到所有的判断结束

我认为,在有些时候& 和 | 还是很有用的!

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值