Java while(true)不等于while(!false)
我目前正在一个开发客户机/服务器软件的项目中工作。我有一个奇怪的问题,希望能解决它,但我完全无法解释原因,我找了很长时间 我希望在服务器端有一个while(true)循环,在前一个循环关闭套接字之后,强制服务器继续接受客户机 所以我试着这样建造它:Java while(true)不等于while(!false),java,intellij-idea,while-loop,client-server,Java,Intellij Idea,While Loop,Client Server,我目前正在一个开发客户机/服务器软件的项目中工作。我有一个奇怪的问题,希望能解决它,但我完全无法解释原因,我找了很长时间 我希望在服务器端有一个while(true)循环,在前一个循环关闭套接字之后,强制服务器继续接受客户机 所以我试着这样建造它: public void run() { Socket socket; while(true) { try { socket = server.accept(); B
public void run() {
Socket socket;
while(true) {
try {
socket = server.accept();
BufferedInputStream in = new BufferedInputStream(socket.getInputStream());
BufferedOutputStream out = new BufferedOutputStream(socket.getOutputStream());
while (socket.isConnected()) {
// TODO income handling
}
in.close();
out.close();
socket.close();
} catch (Exception e) {
break;
}
}
}
但是Intellij告诉我向这个循环添加一个结束条件,我收到了一条错误消息。但我在捕获声明中有一个。改变
while(true)
到
已导致错误消息消失。有人能给我解释一下区别,以及为什么第一次尝试没有成功?我在研究过程中多次发现这种方式。这可能是因为您格式化while循环条件的方式。
如果表达式复杂或复杂。编译器没有意识到这些语句是相同的,正如T.J.Crowder所述。另一种解释是,您创建的while(!false)实际上不是while(!false)。显示您将while循环更改为的内容,以获得其他人更清晰的帮助 这可能是因为您格式化while循环条件的方式。
如果表达式复杂或复杂。编译器没有意识到这些语句是相同的,正如T.J.Crowder所述。另一种解释是,您创建的while(!false)实际上不是while(!false)。显示您将while循环更改为的内容,以获得其他人更清晰的帮助 您这样做是在修补应用程序 IDE(IntelliJ)检测到您正在做一些不应该做的事情,并且您试图避免IntelliJ试图通过添加更糟糕的内容来防止您的不良行为 将条件更改为可以在某个时刻完成的条件或使用标志求值
顺便说一下,在无限循环中声明无限类和实例是一种糟糕的做法。这样做是在修补应用程序 IDE(IntelliJ)检测到您正在做一些不应该做的事情,并且您试图避免IntelliJ试图通过添加更糟糕的内容来防止您的不良行为 将条件更改为可以在某个时刻完成的条件或使用标志求值
顺便说一句,在无限循环中声明无限类和实例是一种糟糕的做法。首先,IntellJ IDEA检查的目的是帮助您快速发现有问题的代码,而不是让您的生活变得更艰难。 您绝对不应该仅仅为了让IDE满意而更改代码 默认情况下,此检查(“while”语句在不引发异常的情况下无法完成”)会生成警告。 因此,如果您确实遇到了错误,那么您可能会意外更改此检查的设置。 可用检查列表及其严重性设置可在编辑器>检查选项卡的设置对话框中找到 关于
while(true)
和while(!false)
之间的区别:
它们都将产生相等的字节码,所以没有区别,只是缺少这种意图实现
如果您不想看到针对特定目的的警告,您可以:
,而在本例中为
)Alt Enter
- 为此特定语句禁用它(菜单项“抑制语句”)
- 完全禁用此检查(菜单项“禁用检查”)
- 或打开设置对话框(菜单项“编辑检验配置文件设置”)
while(true)
和while(!false)
之间的区别:
它们都将产生相等的字节码,所以没有区别,只是缺少这种意图实现
如果您不想看到针对特定目的的警告,您可以:
,而在本例中为
)Alt Enter
- 为此特定语句禁用它(菜单项“抑制语句”)
- 完全禁用此检查(菜单项“禁用检查”)
- 或打开设置对话框(菜单项“编辑检验配置文件设置”)
(true)
,而在(!false)时没有代码检测。在任何情况下,异常都不应该是循环结束的唯一方式。在当前IntelliJ IDEA(最终版,2017.3)中,我既没有收到警告,也没有收到关于的错误,而则是针对您的代码。对于!false
我唯一得到的是“它可以简化”。是的,删除break
语句您将收到警告,但当出现break
时没有警告。另外,无限循环检查足够聪明,可以理解!false
与true
相同。您正在使用哪个版本的IDEA?因为IntelliJ显然有代码可以在(true)
时检测,而在(!false)
时不检测。无论如何,异常不应该是循环结束的唯一方式
while(!false)