【问题标题】:Setting array values on construction in Java [duplicate]在Java中设置数组值[重复]
【发布时间】:2018-09-26 05:44:06
【问题描述】:

有没有办法在构造时设置数组的默认值?我正在像这样初始化一个字符数组,

char[] chars = new char[value];

但是,每个元素的默认值是十进制 0,而不是十进制 48,它是 '0' 的 ASCII 字符。

我找到的最接近的东西是调用:

Arrays.fill(chars, '0');

用所需的十进制值48填充数组

但这是在数组已经创建完整的 0 值之后调用的,这可能需要更多时间?

【问题讨论】:

  • 答:你为什么要这么做? B:你可以用你需要的任意数量的值和一个像这样的“默认”值来初始化它:char[] c = new char[] { '0' }; 但是大小是硬编码的
  • 如果它是一个已知大小的小数组,您也可以使用文字表示法:char[] chars = {48,48,...}
  • 它是方法的一部分,所以我不想硬编码数组的大小。
  • @XtremeBaumer 是的,我不小心被单引号包围了。现已修复。
  • 不是真的,我知道如何声明一个数组。我想知道是否可以调整默认值。事实证明它不能。

标签: java arrays char ascii


【解决方案1】:

对于字符,默认值是空字符,所以你得到它的 ASCII 码'0'。

【讨论】:

  • 对于字符(实际上是任何对象)默认值为空。他有一个原始字符数组,不能为空。默认值确实是 0
  • 文档说明“对于 char 类型,默认值为空字符,即 '\u0000'。”
  • null char 等于数字 0(因为 chars 实际上是字节)。不为空 - 值。我的意思不是 '0' 字符 - 这就是那个人想要的,但他得到的数字 0 是 '\u0000'。
  • @VeselinDavidov "因为字符实际上是字节" - 从JLS §4.2.1: "对于char,从'\u0000''\uffff' 包括在内,即是,从 0 到 65535" - 所以不,chars 不是 bytes。
  • ok ;) 不是字节
【解决方案2】:

根据JLS §15.10.2. Run-Time Evaluation of Array Creation Expressions

...

然后,如果出现单个 DimExpr,则创建一个指定长度的一维数组,并将数组的每个组件初始化为其默认值(第 4.12.5 节)。

...

char 原语的默认值为\u0000

您可以按照JLS §10.6. Array Initializers 使用数组初始值设定项语法来避免数组元素的重新分配:

char[] chars = { 'a', 'b', 'c' };

但这只有在编译期间知道数组大小时才有效。

【讨论】:

【解决方案3】:

如果它是基元数组,则使用该基元类型的默认值进行初始化。对于 boolean,它是 false,对于数字类型和 char,它是 0(字节值)或 '\u0000',如果你需要 char。如果要设置默认值,则必须按照您找到的方式手动填充该数组。我认为您不会注意到任何性能下降。

【讨论】:

  • char 的默认值不是零而是空值。 '0' 是它的 ASCII 码。
  • 不。 Character 的默认值为 null。但他使用的是“char”,它是一个原始的而不是一个对象,默认值为 0
  • 检查documentation。 char 的默认值为 null。
  • 对于 char 其空“字符”。不是 0 或 null。
  • 好吧,我的解释不好。那时我们正在谈论不同的东西。我的意思是它是 0 作为字节值。它是 0,因为数字 0 而不是字符 '0'(因为 '\u0000' 实际上等于 0)。如果你创建一个 char a;并做 a==0 这将是真实的
【解决方案4】:
char[] chars = new char[] {'a', 'b', 'c'};

【讨论】:

    猜你喜欢
    • 2015-10-05
    • 1970-01-01
    • 2013-12-28
    • 2011-01-01
    • 2020-02-14
    • 2015-08-22
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多