在Java中设置数组值[重复]
Posted
技术标签:
【中文标题】在Java中设置数组值[重复]【英文标题】:Setting array values on construction in Java [duplicate] 【发布时间】: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 是的,我不小心被单引号包围了。现已修复。
不是真的,我知道如何声明一个数组。我想知道是否可以调整默认值。事实证明它不能。
【参考方案1】:
对于字符,默认值是空字符,所以你得到它的 ASCII 码'0'。
【讨论】:
对于字符(实际上是任何对象)默认值为空。他有一个原始字符数组,不能为空。默认值确实是 0 文档说明“对于 char 类型,默认值为空字符,即 '\u0000'。” null char 等于数字 0(因为 chars 实际上是字节)。不为空 - 值。我的意思不是 '0' 字符 - 这就是那个人想要的,但他得到的数字 0 是 '\u0000'。 @VeselinDavidov "因为字符实际上是字节" - 从JLS §4.2.1: "对于char
,从'\u0000'
到'\uffff'
包括在内,即是,从 0 到 65535" - 所以不,char
s 不是 byte
s。
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' ;
但这只有在编译期间知道数组大小时才有效。
【讨论】:
它在哪里声明 char 原始默认值为零? 也许我的答案措辞不好。 char 的默认值是按docs.oracle.com/javase/specs/jls/se10/html/… 写为\u0000
(即0x00
,或只是0
)的空字符【参考方案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';
【讨论】:
以上是关于在Java中设置数组值[重复]的主要内容,如果未能解决你的问题,请参考以下文章
在Jquery Datepicker中设置日期的初始值[重复]