while是循环,你写在里面每次都会有个 int b= in.read();
相当于你写下代码 int b; int b=0; 试一下编译能不能通过,会重定义错误的
while((int b = in.read()) != -1)这样做就相当于你定义了多个同名变量b,当循环次数大于1时,这自然是错误。它不像for循环,for循环中for(int i=0;;)的int i=0只执行一次。还有,如果in = null,后面引用in 时肯定会抛出"java.lang.NullPointerException"异常,即空指针异常。