String[] array = {"a","c","b"};
ArrayList<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
System.out.println(array);
System.out.println(list);
For list
[a, b, c]
输出,而for
array
一些地址输出。当我们想要输出array
值时,我们可以Arrays.toString(array);
像使用一样使用它们list
。
我只是想知道为什么我们不能toString()
直接调用array
以获得值。这样做不是更直观,更方便吗?是什么导致对Array
和的不同处理ArrayList
?
数组和数组列表之间的主要区别在于,数组列表是用Java编写的类,具有自己的实现(包括覆盖的决定toString
),而数组是语言规范本身的一部分。JLS
10.7
特别指出:
数组类型的成员都是以下所有:
- 公众最终场长
- 公共方法克隆,它覆盖类Object中相同名称的方法,并且不引发任何检查的异常。
- 所有成员都从Object类继承;不继承的对象的唯一方法是其克隆方法。
换句话说,语言规范防止toString
覆盖数组的方法,因此它使用定义的默认实现,Object
该默认实现中将打印类名和哈希码。
为什么要做出这个决定是一个可能应该问给语言设计者的问题…
问题内容: 今天,我刚刚发现了一个问题,因为我的一个单元测试由于从Java 7升级到Java 8而失败了。该单元测试调用一个方法,该方法试图在子类上注释的方法上找到注释,但返回类型不同。 在Java 7中,似乎只有在代码中确实声明了注释时,才会找到注释。在Java 8中,似乎包含在子类中声明的注释。 为了说明这一点,我创建了一个简单的(??)测试类IAPTest(用于IsAnnotationPre
问题内容: 有谁知道为什么python允许您在对象和称为“”的方法名称之间添加无限量的空格。? 这里有些例子: 另一个例子: 对于类也是如此。 我使用的是python 2.7,我尝试过进行一些Google搜索并查看python源代码,但找不到任何允许这样做的原因。 问题答案: 该就像一个运营商。你可以做同样的方式,你可以做或等。该语言参考说: 除逻辑行的开头或字符串文字外,空格字符空格,制表符和换
好的,这是我的代码的一个紧凑版本 IDE(Eclipse)在emparray.add行上给出了以下错误 无法对非静态emparray进行静态引用 EmployeeClass无法解析为变量 令牌obj语法错误,请删除此令牌。 null
问题内容: 我正在使用Eclipse来帮助我清理一些代码以正确使用Java泛型。大多数时候,它在推断类型方面做得非常出色,但是在某些情况下,推断类型必须尽可能地通用:对象。但是Eclipse似乎给了我一个选择,可以选择对象类型还是“?”类型。 那么两者之间有什么区别? 和 问题答案: 匹配项的实例,但不是。假设您要编写一个接受Strings到任何内容的映射的方法:如果您要编写 您无法提供。如果你写
问题内容: 我想知道子句中和值之间的区别。当我使用而不是时,为什么会给我一个编译错误(一个值可能尚未初始化)。 下面是我的代码: 问题答案: 简短答案 对于编译器,可以推断出在读取之前已初始化的内容。这并非如此。 正式答案: 在读取之前, 所有局部变量都必须有一个 确定的赋值 (14.4.2。局部变量声明的执行): […]如果声明符没有初始化表达式, 则对变量的每次引用都必须在对变量的赋值之前执行
我创建的以下地图之间有什么不同(在另一个问题中,人们似乎可以互换地使用它们来回答,我想知道它们是否/如何不同):