Java 非负值与-1的比较不好
FindBugs报告我正在比较以下代码的非负值和-1Java 非负值与-1的比较不好,java,findbugs,inputstreamreader,Java,Findbugs,Inputstreamreader,FindBugs报告我正在比较以下代码的非负值和-1 /* I get inputstreamreader from a org.apache.commons.net.telnet.TelnetClient object */ InputStreamReader reader = telnet.getInputStream(); char msg = 0; StringBuilder temp = new StringBuilder(); while((msg = (char)reader.
/* I get inputstreamreader from a org.apache.commons.net.telnet.TelnetClient object */
InputStreamReader reader = telnet.getInputStream();
char msg = 0;
StringBuilder temp = new StringBuilder();
while((msg = (char)reader.read()) != -1){
temp.append(msg);
}
System.out.println("Read Message = "+temp.toString());
但是当我通读InputStreamReader.read()
文档时,它会说“返回:读取的字符数,如果到达流的末尾,则返回-1”
我做错了什么
提前感谢读卡器返回
int
,可能是负数。但是您正在将值强制转换为非负的char
顺便说一句,此方法不返回读取的字符数,而是返回一个字符:
返回:读取的字符,作为0到65535(0x00-0xffff)范围内的整数,或者-1(如果已到达流的结尾)()while循环将字符与负整数进行比较。这应该起作用:
InputStreamReader reader = telnet.getInputStream();
int data = 0;
StringBuilder temp = new StringBuilder();
while((data = reader.read()) != -1){
char msg = (char) data;
temp.append(msg);
}
System.out.println("Read Message = "+temp.toString());
Java中的
char
是单个16位Unicode字符,范围从0到65535。它永远不会是消极的
作为一个有趣的练习,请检查此打印的内容:
System.out.println(“>>>>测试:”+(int)((char)-1))代码>
然后找出原因。也许你应该标记有问题的语言。