【发布时间】:2020-12-04 21:39:38
【问题描述】:
我可以通过隐式分配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
那么为什么来自 java API 的一些“高级”类可以具有这种从赋值构造隐含的行为,而自定义的用户定义类却不能呢?
【问题讨论】:
-
fwiw,这行中发生的事情与 C++ 中具有相似语法的行中发生的事情完全不同。它们看起来很相似,但这是由于语法相似,否则 C++ 和 Java 非常不同
-
@OP -- C++ 不是 Java,Java 不是 C++。它们是两种不同的语言。
-
@PaulMcKenzie 但是阅读这个问题可以清楚地表明,OP 不会以任何方式对此感到困惑。因此,尽管您的陈述是正确的,但我不确定它的用途是什么。提及语言之间的相似性并没有错。
-
您的问题不是关于相似之处,但是当您说“此行为类似于 c++ ...”时,您的问题有一个错误的前提,您可以在不实质性改变问题的情况下删除该错误前提,然后您也可以去掉 C++ 标签。您错误地假设它们相似,但实际上这些都与 C++ 无关;)
-
@PaulMcKenzie 如果你问这个问题,你可以这样做。我不清楚你为什么坚持让 OP 这样做。
标签: java c++ string constructor implicit-conversion