Java:对象数组;本地实例和类级别实例有啥区别? [关闭]
Posted
技术标签:
【中文标题】Java:对象数组;本地实例和类级别实例有啥区别? [关闭]【英文标题】:Java: Arrays of Objects; what is the difference between local and class-level instances? [closed]Java:对象数组;本地实例和类级别实例有什么区别? [关闭] 【发布时间】:2012-06-07 09:53:11 【问题描述】:就初始/默认/未初始化值而言... ...是否已初始化数组对象(在类和本地级别)?
在一些 SCJP 笔记中阅读它:
数组元素被赋予其默认值,无论是否 数组被声明为实例或局部变量。
如果声明了数组“对象”,则不会对其进行初始化 本地。
【问题讨论】:
你能解释一下你的问题是什么意思吗? 请查看 John Skeet 在how to ask the perfect question 上的博客文章,了解更多信息可以帮助我们。 已编辑问题,请再次查看 @pop stack:恭喜:您在 JLS 中找到了问题的答案。 【参考方案1】:声明为字段的数组被初始化为 null,就像每个非原始实例变量一样。声明为局部变量的数组未初始化,与其他所有局部变量一样。
一旦初始化为一个新数组,它们的每个元素都包含 null。
【讨论】:
【参考方案2】:一个未初始化的对象总是null
。
Object[] myArray;
//myArray == null
myArray = new Object[1];
//myArray[0] == null
【讨论】:
并非如此。如果它是实例或静态变量,则您的第一个数组被隐式初始化为 null。如果是局部变量,则未初始化。【参考方案3】:作为引用类型的类成员的初始值为 null。
作为引用类型的局部变量被认为是单元化的,需要明确地分配 null 或其他东西,否则代码将无法编译。
尝试测试这个例子,看看会发生什么:
class Test
private Object[] member;
public void foo()
member.toString(); // NullPointerException
Object[] local;
local.toString(); // won't compile: The local variable local may not have been initialized
对象数组遵循相同的规则,因为它们本身就是引用。
现在,这是数组本身。当谈到数组的实际元素时,无论您在何处声明它们,它们默认为 null:
class Test
private Object[] member = new Object[10];
public void foo()
member[0].toString(); // NullPointerException
Object[] local = new Object[10];
local[0].toString(); // NullPointerException
【讨论】:
【参考方案4】:1.In JAVA local variable have to intitialized before using it.
2. String s[] = new String[2];
Here s[0] and s[1] both contains NULL value and initialize s[0] and s[1] as:
s[0] = new String();
s[1] = new String();
【讨论】:
以上是关于Java:对象数组;本地实例和类级别实例有啥区别? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章