java - 什么时候允许我们在Java中使用 "new"关键字以及如何使用它?

标签 java

<分区>

据我所知,new 关键字用于实例化类。而且我认为我们需要调用类构造函数并在 this 关键字之后传递它的参数。

好的,这是一个代码片段:

public class JavaApp{

    public static void main(String[] args) {
        String st1 = "Test";
        String st2 = new String("Test");

        byte[] b1 = {'a', 'b'};
        byte[] b2 = new byte[]{'a', 'b'};
        byte[] b3 = new byte[]('a','b'); //Error

        byte b4 = 3;
        byte b5 = new byte{3}; //Error
        byte b6 = new byte(3); //Error

    }

}

我的问题:

  1. st1st2 有什么区别?
  2. 为什么我们必须在 {} 中传递构造函数的参数,而不是在 b2 声明行中传递 ()
  3. 为什么我收到 b5b6 的错误?

最佳答案

  1. st1st2 是两个不同的对象;第一个驻留在 String-Pool 中,第二个作为普通 java 对象位于 Heap 内存中。

  2. {} 不是调用构造函数,它只是一种初始化数组的语法。

  3. byte 不是类;它是原始类型,因此 byte 没有构造函数。

关于java - 什么时候允许我们在Java中使用 "new"关键字以及如何使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36807552/

相关文章:

java - 保护 Android 应用程序免受网络嗅探

Java 8 句子流

java - 如何获取Thread中的对象?

java - 一列布局不使用整个窗口宽度

java - @Override on 子类 "appears"中的方法在运行时被忽略

java - org.eclipse.swt.widgets.TableColumn atPosition(x,y)

java - 用 Java 编写 SOAP 客户端

java - Android: ListView 未显示

java - 当我将操作栏与 fragment 一起使用时,操作栏给出空指针异常

java - AbstractAction 作为 WindowListener