Java:相同的字符串返回不同的字节数组

标签 java string byte

我希望两个相同字符串的字节表示也相同,但情况似乎并非如此。下面是我用来测试它的代码。

    String test1 = "125";
    String test2 = test1;

    if(test1.equals(test2))
    {
        System.out.println("These strings are the same");
    }

    byte[] array1 = test1.getBytes();
    byte[] array2 = test2.getBytes();

    if(array1.equals(array2))
    {
        System.out.println("These bytes are the same");
    }
    else
    {
        System.out.println("Bytes are not the same:\n" + array1 + " " + array2);
    }

预先感谢您的帮助!

最佳答案

两个相同但不相关的 String 对象的字节表示很可能是逐字节相同的。但是,只要 String 对象不相关,它们就不会是相同数组对象。

您的代码错误地检查了数组相等性。修复方法如下:

if(Arrays.equals(array1, array2)) ...

此外,即使对同一个 String 对象多次调用 getBytes,您也会得到不同的字节数组:

String test = "test";
byte[] a = test.getBytes();
byte[] b = test.getBytes();
if (a == b) {
    System.out.println("same");
} else {
    System.out.println("different");
}

The above code prints "different".

这是因为 String 不会保留 getBytes 的结果。

注意:您的代码确实对同一个对象调用了 getBytes 两次,因为这一行

String test2 = test1;

不复制字符串,而是创建对同一字符串对象的第二个引用。

关于Java:相同的字符串返回不同的字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23203876/

相关文章:

java - 不同包中的 Eclipse RCP 类可见性

python - re.sub() - 用于替换字符串中最后一次出现的子字符串的正则表达式

c++ - 来自 std::unordered_set<char> 的有效构造 std::string

java - 在java中将位串转换为字节

objective-c - objective-c 中的字节数组

java - 解密错误 : javax. crypto.IllegalBlockSizeException:使用填充密码解密时,输入长度必须是 8 的倍数

java - 最简单的 NIO 服务器示例

java - 在单击事件上更改 JButton

java - ColdFusion 中的 System.err java 日志位置

C:初始化字符指针(字符串)数组并使用 fgets 遍历文件以将值放入这些字符串