为什么,如果你有,比方说,这些功能:

void func1(Object o){
      //some code
}
void func1(Object[] o){
      //some code
}

你可以打电话,例如:

func1("ABC");

不是

func1({"ABC", "DEF"}); // instead having to write:
func1(new Object[]{"ABC", "DEF"});

问题:为什么需要在数组上调用构造函数有什么特殊原因吗?

#1楼 票数:5 已采纳

“数组初始化程序”仅适用于声明/分配:

Object[] o = { 1, 2 };

或者对于“数组创建表达式”

new Object[] { 1, 2 };

不适用于方法调用:

// Doesn't work:
func1({1, 2});

这是它的方式......你可以在JLS第10.6章中阅读它 数组初始化器 提取物:

数组初始化可在声明(指定§8.3第9.3节§14.4 ),或作为阵列创建表达式(的一部分§15.10 ),以建立一个数组,并提供一些初始值。

除了现在没有在JLS中定义之外,似乎没有理由为什么未来的Java版本不允许在其他上下文中使用数组初始化器/数组文字。 可以从使用数组文字的上下文或包含的变量初始化器推断出数组类型

当然,你可以声明func1有一个varargs参数。 但是你应该小心重载它,因为这可能会在呼叫站点引起一些混乱

#2楼 票数:5

有人建议Java SE 5.0将使用数组文字表示法。 不幸的是,我们得到了varargs,带来了所有的乐趣。

所以,为了回答为什么,语言就是这样。 您可能会在更高版本的Java中看到列表文字。

#3楼 票数:1

您正在尝试执行Java尚未真正支持的内联数组初始化。

我想如果你愿意的话,你可以使用varargs实现所需的结果,但是如果你需要将一个数组传递给一个方法,你必须按照Java喜欢的方式初始化它。

#4楼 票数:0

当您调用func1("ABC") ,java会自动创建一个值为"ABC" String类型的对象。

要创建String类型以外的任何其他对象,您需要使用new运算符。

  ask by CosminO translate from so

未解决问题?本站智能推荐:

2回复

Java泛型好奇心

我有一个接口A , B类实现。 以下通用方法有效 但 当我将输出定向到时,不会(编译错误,类型不匹配) defaultCollectionFactory(int count)静态提供B s的集合,具有默认的标签方案。 关于为什么会这样的任何见解? 看起来普通的U和通配符正在
4回复

休眠Java好奇心-保存对象后,要保存的对象和已保存的对象都设置了ID

我有以下简单的代码: 通常,我希望expenseToSave不含id,而saveExpense不含id,但保存后都具有id。 为什么? 这使得另一个变量变得必要,并使测试复杂化。 谢谢。
7回复

关于-->.this用法的好奇心

我对 Android 和 Java 很陌生。 我对代码中this的用法有一些疑问。 上面是我的代码片段。 我不明白的是attachButtonListener的 Intent 构造attachButtonListener 。 意图构造函数中存在一些错误,原因是解析意图构造函数出错。 但是在我用Mai
1回复

JavaPattern和MatcherRegex的好奇心

最近,我在正则表达式上做了很多编码。 我一直假设模式一直这样(代码sample1),直到我像代码sample2一样尝试了它: 代码示例1 那很好,产生结果。 同时,当我如下图所示更改结构时: 代码示例2 我意识到有时sub1为null,有时sub2为null。 关于Matc
1回复

对Java套接字和打印流的好奇心

我正在学习一些 Java 套接字编程,并且我已经设法在服务器和客户端之间建立了我的第一个连接。 这激发了我的好奇心:如果我制作了一种“聊天室”类型的东西,而不是“已连接”和“收到消息”消息,将服务器和客户端输入相互打印出来,会发生什么? 所以我试着这样做。 现在,我知道这不是创建聊天室的方式(我可能
2回复

Javathread.sleep标准好奇心

出于好奇,为什么在使用Java线程时就像使用Thread.sleep(100)一样是一种标准? 为什么不使用另一个值而不是100?
1回复

Java的好奇心:对类中的成本使用浮点数或双精度数

我只是在为要出售的物品进行快速培训。 这是上述课程的代码: 这是我用来测试的简单驱动程序应用程序中的调用方法: 我的好奇心是,起初,我使用浮点数作为成本变量。 但是,在编译时,由于它是从double TO float转换而导致的可能的数据丢失,因此出现错误。 我已经将变量声明为浮
7回复

Java未初始化的变量,最终带来好奇心

当我遇到一些有趣的代码时,我试图为我正在帮助( Avian )的替代开源JVM提出模糊的测试用例,我很惊讶它没有编译: 最明显的代码路径(我看到的唯一一个)是执行a = 1,“尝试”返回(第一次),然后执行finally, 实际返回a。 但是,javac抱怨“a”可能尚未初始化: 我能