String.getBytes()为多次执行返回不同的值?

时间:2014-09-26 18:45:32

标签: java string

public static void main(String[] args) {
    try {
        String name = "i love my country";
        byte[] sigToVerify = name.getBytes();
        System.out.println("file data:" + sigToVerify);
        String name1 = "data";
        byte[] sigToVerify1 = name1.getBytes();
        System.out.println("file data1:" + sigToVerify1);

    }
}

我正在尝试执行上述程序,但getBytes()为同一String提供了不同的值。有没有办法在给定字符串执行多次时获取相同的字节?

2 个答案:

答案 0 :(得分:8)

System.out.println("file data:" + sigToVerify);

此处您不打印String的值。正如owlstead在注释中正确指出的那样,将在字节数组sigToVerify上调用Object.toString()方法。导致这种格式的输出:

getClass().getName() + '@' + Integer.toHexString(hashCode())

如果要打印数组中的每个元素,则必须循环遍历它。

byte[] bytes = "i love my country".getBytes();
for(byte b : bytes) {
    System.out.println("byte = " + b);
}

甚至更简单,使用Arrays.toString()方法:

System.out.println(Arrays.toString(bytes));

答案 1 :(得分:1)

尝试打印出字节数组的内容,而不是变量

的toString()结果
for(byte b : sigToVerify)
    System.out.print(b +"\t");

如果打印的字节相同,那么你就可以了。