【问题标题】:'byte' type in Java [duplicate]Java中的“字节”类型[重复]
【发布时间】:2012-01-12 10:53:06
【问题描述】:

可能重复:
Literal Syntax For byte[] arrays using Hex notation..?

我正在尝试创建一个大小为“1”的字节数组来保存字节0x0。在 Java 中,我可以这样做吗:

byte[] space = new byte[1];
space[0] = 0x0;

十六进制值0x0会被转换成它的字节表示00000000并存储在space[0]中吗?

【问题讨论】:

  • Java(与任何编程语言一样)是关于,而不是表示。我敢肯定,您的大多数先入之见都是错误的。

标签: java arrays byte


【解决方案1】:

十六进制值 0x0 会被转换成它的字节代表 00000000 并存储在 space[0] 中吗?

在您的执行程序中,Java byte 值零只有一种表示形式 - 整数零的 8 位 2 的补码表示 - 8 位零。

将源代码中的数字字面量表示为0(十进制)或00(八进制)或0x0 没有任何区别。它们都意思完全相同。


所以 - 是的,您的代码符合您的预期。

更简单的一行版本是:

byte[] space = new byte[] {0};

byte[] space = {0};

甚至

byte[] space = new byte[1];

(最后一个依赖于 Java 字节数组默认初始化为全零的事实。)


十六进制值0x0 是否会被转换为00000000 的字节表示并存储在space[0] 中?

是的。从技术上讲(即根据 JLS)会发生什么:

  1. 0x0 变为 int 文字。 (在这一点上,用于整数文字的特定语法实际上并不重要……只要它有效。)
  2. 使用隐式原始缩小转换为 byte 值来缩小 int 字面量。
  3. byte 值用于数组的初始化。

第 2 步中的隐式缩小是允许的,因为:

  1. 这是在分配上下文中
  2. 分配的值是整数类型的编译时常量表达式。 (文字是编译时常量表达式。)
  3. 实际分配的值在要分配的类型范围内。 (在这种情况下,-128 到 +127。)

通俗地说,编译器“知道”在缩小转换中永远不会丢失任何信息。

【讨论】:

  • byte[] space = {0}; 可能是这里最好的。
  • 我认为问题真的是 0x0 是否是 OP 认为的那样......
  • @RomanB - 好吧......在不知道 OP 实际上认为 0x0 真正“是”的情况下,很难回答这个问题。 :-)
【解决方案2】:

是的,这将完全按照您的想法进行。另请参阅此related question

【讨论】:

    猜你喜欢
    • 2013-04-18
    • 1970-01-01
    • 1970-01-01
    • 2011-01-25
    • 2010-12-31
    • 2010-12-27
    • 1970-01-01
    • 1970-01-01
    • 2012-08-23
    相关资源
    最近更新 更多