在java中,我可以像在c++中那样用隐式参数创建对象吗?

i2loujxw  于 2021-07-03  发布在  Java
关注(0)|答案(2)|浏览(326)

我可以通过隐式分配char数组在java中创建字符串

String s = "asd";

而不是

String s = new String("asd");

这种行为类似于使用隐式单参数构造函数的c++。
那么为什么不能使用另一个用户定义的类呢?

public class Foo {
    public Foo(int i) {
        System.out.println(i);
    }
}

public class Main {
    public static void main(String[] args) {
        Foo f = 9;
    }
}

给予

Type mismatch: cannot convert from int to Foo

那么,为什么一些来自javaapi的“高级”类可以通过赋值行为隐式地进行构造,而自定义的、用户定义的类却不能?

0ve6wy6x

0ve6wy6x1#

java中没有隐式构造函数。用双引号括起来的一系列字符是字符串文字。正如您所怀疑的,这个定义是语言本身的一部分,无法在java中为您自己的类型创建文本。

polkgigr

polkgigr2#

首先,你错了: "asd" 不是char数组,而是字符串文本,当然与 new String("asd") .
与其他一些编程语言不同,java非常静态,不支持扩展语言本身,例如,不支持运算符重载和隐式构造等功能。
java语言有一组内置的数据类型,如第4章所述。类型、值和变量: String 所有的原始类型( boolean , byte , short , int , long , char , float ,和 double ). 这些类型之间的转换包含在第5章中。转换和上下文。
一些java类型,主要是 java.lang 包,是java语言的一部分。它们有非常特殊的含义,在java语言规范中有明确的文档记录,不被认为是“高级的”,而只是该语言的“本机的”。以下是一些示例: String 是本机java类:§4.3.3. 类字符串,§3.10.5. 字符串文字,§5.1.11. 字符串转换,§5.4. 字符串上下文,以及§15.18.1. 字符串连接运算符 + . Throwable , Error , Exception . 以及 RuntimeException 是本机java类,有一整章专门介绍它们:第11章。例外情况。
许多注解,例如 Override 以及 FunctionalInterface ,对java语言有特殊意义:§9.6.4. 预定义的注解类型。 AutoCloseable 是对try with resources语句具有特殊意义的本机java接口:§14.20.3. 尝试使用资源。 Iterable 以及 Iterator 是本机java接口,对 for 回路:§14.14.2. 增强的for语句。

相关问题