Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用未初始化字节数组单元格构造的字符串的比较_Java_String - Fatal编程技术网

Java 使用未初始化字节数组单元格构造的字符串的比较

Java 使用未初始化字节数组单元格构造的字符串的比较,java,string,Java,String,接下来,我尝试从字节数组构造字符串,这些字节数组可能没有将所有单元格设置为特定值(参见下面的代码)。如果一个字符串是由这样的字节数组构造的,那么分配的但未设置的字节仍然计数,使得比较(使用equals())失败 看, 公共类测试{ 公共静态void main(字符串[]args){ 字节[]b=新字节[10]; 字符串s=“重置我”; 对于(int i=0;i

接下来,我尝试从字节数组构造字符串,这些字节数组可能没有将所有单元格设置为特定值(参见下面的代码)。如果一个字符串是由这样的字节数组构造的,那么分配的但未设置的字节仍然计数,使得比较(使用
equals()
)失败

看,

公共类测试{
公共静态void main(字符串[]args){
字节[]b=新字节[10];
字符串s=“重置我”;
对于(int i=0;i<8;i++){
b[i]=(字节)s.charAt(i);
}
字符串s2=新字符串(b);
系统输出println(s等于(s2));
}
}

它打印“假”。除了编写我自己的比较器之外,是否有一种方法可以比较字符串,从而不考虑未设置的字节?

为什么不保持简单,使用构造函数从
字节[]
构建字符串,并避免包含未设置的字节:

String s2 = new String(b, 0, 8);

“未初始化”
字节[]
单元格将为
0
(因此
字符串中的相应字符将为U+0000)。这在Java中并不是未定义的行为。作为一个一般性的说明:为什么在
字符串中有您一开始就不关心的字符?去掉这些,继续使用一个来自我使用的缓冲区数据结构的健全的
字符串。基本上,我正在通过套接字进行事务处理,但可能会发生事务终止而不使用缓冲区中的所有内容,因此空白的单元格。在这种情况下,您通常知道发送/使用了多少数据。
String s2 = new String(b, 0, 8);