当前位置: 首页 > 面试题库 >

使用和不使用`New`关键字定义数组有什么区别?

陆宝
2023-03-14
问题内容

看这两个简单的程序:

程序1:

public class GenArray extends Applet {
    byte[] myArray  ={ (byte) 'M', (byte) 'o', (byte) 'd', (byte) 'e',
            (byte) '1' };
}

程式2:

public class GenArray extends Applet {
    byte[] myArray = new byte[5];
    {
        myArray[0]  =(byte) 'M';
        myArray[1]  =(byte) 'o';
        myArray[2]  =(byte) 'd';
        myArray[3]  =(byte) 'e';
        myArray[4]  =(byte) '1';
    }
}

我想知道MyArray在Program-1 MyArray的最后一行和Program-2 的最后一行之间是否有区别?(任何区别!)


问题答案:

在第二个程序中,{ ... }are不是数组定界符,它们是块定界符;在这种情况下,它们用于提供所谓的初始化块,该初始化块在实例化类的新实例时执行。

创建初始化数组的“正确”方法是:

new byte[] { 1, 2, 3 };

在初始化引用,使用现有引用或将数组传递给方法时,都可以始终使用它:

byte[] myArray = new byte[] { 1, 2, 3 };    // OK
myArray = new byte[] { 4, 5, 6 };           // OK
anObject.someMethod(new byte[] { 7, 8, 9}); // OK

但是,第一种变体非常普遍,因此Java允许您 在特定情况下new byte[]省略该部分: __

byte[] myArray = { 1, 2, 3 };    // OK
myArray = { 4, 5, 6 };           // Does not compile
anObject.someMethod({ 7, 8, 9}); // Does not compile


 类似资料:
  • 问题内容: 我正在网上关注Java教程,尝试学习该语言,并且它在使用数组的两种语义之间反弹。 和: 该教程从未真正提到过为什么它会在两者之间来回切换,所以我对该主题进行了一些搜索。我目前的理解是,操作员正在创建“ longs数组”类型的对象。我 不 明白的是为什么我要那个,那有什么后果? 是否存在某些特定于“数组”的方法,除非它是“数组对象”,否则这些方法对数组不起作用? 有什么我 不能 用普通数

  • 问题内容: 以下两个声明之间有什么区别? 和 是在堆栈上还是在堆上声明? 问题答案: 一个明显的区别是,一个全为零,另一个包含[1..5]。 但这是唯一的区别。两者都是5元素整数数组,都以相同的方式分配。用大括号声明不只是语法上的方便。 请注意,只有在声明数组时才能使用此形式: 但不是 要么 对象(数组是对象)在堆上分配。

  • 问题内容: 因此,对于Toast类,显然可以这样编写: 为什么完全可以实例化toastMessage并将其用作没有new关键字的对象? 如何通过方法实例化toastMessage? 问题答案: 这里没有什么特别的。您只是在调用创建实例的静态方法(或者可以重用现有实例- 这是实现细节)。例如,这是您会在各处看到的一种模式。有时可以改为调用构造函数,有时 只能 通过静态方法创建实例。 除非幕后功夫,否

  • 问题内容: 以下代码是做什么的: 构造函数在哪里,我想用新函数扩展Widget的“类” 。 什么是 关键词在那里做,如果它被省略了,会发生什么? 问题答案: WeatherWidget.prototype = new Widget; 该关键字调用构造函数,返回值分配给属性。(如果省略,除非添加了参数列表,否则将不会调用。但是,以这种方式调用可能是不可能的。如果它不是严格的模式代码并且实现是,则肯定

  • 问题内容: 我对在swift中使用 static 关键字有些困惑。众所周知,swift引入了 let 关键字来声明不可变对象。就像声明表视图单元格的ID一样,该ID在其生命周期中很可能不会发生变化。现在在一些类似struct的声明中使用 static 关键字是什么: 而 让 关键字做同样的事情。在目标C中,我们使用static声明了一些常量,例如 除了让我更好奇的是,还使用了 static 关键字

  • 我满足了一些深度复制原始对象文字的需求,除了一些键。我知道扩展运算符不会深度复制整个嵌套对象,但这不是这个问题的要点,所以让我们通过这个问题。 所以,回到原来的问题,我看不出使用delete关键字和将undefined分配给我要删除的目标属性之间有什么区别。 似乎方式没有那么冗长,但这样完全可以吗?