java && 和 &、|| 和 | 的区别和作用
来源:互联网 发布:centos rm 删除文件夹 编辑:程序博客网 时间:2024/04/28 14:10
我在学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
& 和 | :它们的判断结果和&&、|| 没有区别,但在执行时有,也就是如果执行到某一部分即使已经得出结果,它们仍然会继续判断,直到所有的判断结束
我认为,在有些时候& 和 | 还是很有用的!
- java && 和 &、|| 和 | 的区别和作用
- js 和 java 作用域的区别
- Java中hashCode和equals的区别和作用
- JAVA hashCode() 和equals() 区别和作用
- getClass()和getSimpleName()的区别和作用
- ref和out的作用和区别
- Iterator和ListIterator的作用和区别
- Session和Cookie的作用和区别
- getClass()和getSimpleName()的区别和作用
- 类目和延展的作用和区别?
- Session和Cookie的作用和区别
- getClass()和getSimpleName()的区别和作用
- getClass()和getSimpleName()的区别和作用
- @Resource和@Autowired的作用和区别
- session和cookies的作用和区别
- call()和apply()的作用和区别
- getClass()和getSimpleName()的区别和作用
- getClass()和getSimpleName()的区别和作用
- 在Unity 5中如何控制检视面板上的属性是否显示?
- Linux 驱动常见错误返回值
- $(window).scroll()无法触发
- 关于STL 的那些事
- mybatis批量插入
- java && 和 &、|| 和 | 的区别和作用
- Codeforces Round #384 (Div. 2)-C. Vladik and fractions
- 【Java】如何高效判断数组中是否包含某个元素?
- XML解析
- How to enable Nginx FancyIndex on Ubuntu
- java(二)排序
- 项目实战篇-餐馆管理系统—MFC,PHP,MySql:2.登陆功能的实现
- Swift 函数
- 方法覆盖 - new关键字