【问题标题】:Variations in byte value of a string字符串字节值的变化
【发布时间】:2019-02-12 12:45:05
【问题描述】:

如果系统从32位更改为64位,字符串的字节值会改变吗?

假设我有一个字符串,我想要那个字符串的字节值。我想知道Windows 32位和Windows 64位系统中的字节值是否保持不变?

【问题讨论】:

  • Java 中的内部表示对您来说是透明的。您只能通过 API 访问字符串,字节表示与您无关。但基本上,JVM 定义了表示,而不是它运行的机器。
  • JVM 根据定义始终是 32 位的,无论它运行在哪种系统上。 JVM 实现者负责确保行为相同。
  • @chrylis:我不太清楚你的第一句话是什么意思。例如,JVM 当然可以在 64 位模式下运行并在内部使用 64 位指针。
  • @JoachimSauer JVM 实现可以在 128 位(安腾)或 16 位上运行; JVM 的内部模型是 32 位的。

标签: java encryption bit


【解决方案1】:

我必须假设“字符串的字节值”是指通过使用给定编码对字符串进行编码而生成的字节值。

如果是这样,那么从 32 位架构切换到 64 位架构不会改变结果。

然而,如果您只使用String.getBytes() 而不使用任何参数来获取byte[],那么返回值将取决于系统默认编码。虽然这在具有相同设置的同一操作系统的 32 位和 64 位版本之间不太可能有所不同,但系统默认编码可能会根据许多其他参数(例如操作系统中配置的 UI 语言)而有所不同,因此它始终是通过始终指定这样的特定编码来避免此问题的好主意:

 byte[] bytes = myString.getBytes(StandardCharsets.UTF_8);

如果在相同的myString 值上调用此调用,则无论您碰巧在何种操作系统、架构或区域设置上运行,此调用将始终产生相同的byte[]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-16
    • 1970-01-01
    • 2021-12-07
    • 2020-01-24
    • 2015-02-20
    • 2011-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多