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:对象数组;本地实例和类级别实例有啥区别? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

本地 和 实例 变量之间有啥区别

java接口和类有啥区别?

Java中锁的级别

实体和类有啥区别?

JAVA类与对象---实例变量与类变量的区别,实例方法和类方法的区别

java-实例变量和类变量的区别