在Java中,数组不会覆盖toString(),因此如果您尝试直接打印数组,则会获得className + @ + className数组的十六进制,如下所示hashCode:
int[] intArray = new int[] {1, 2, 3, 4, 5};
System.out.println(intArray); // prints something like '[I@3343c8b3'
Run Code Online (Sandbox Code Playgroud)
但通常我们实际上想要更像的东西Object.toString().这样做最简单的方法是什么?以下是一些示例输入和输出:
// Array of primitives:
int[] intArray = new int[] {1, 2, 3, 4, 5};
//output: [1, 2, 3, 4, 5]
// Array of object references:
String[] strArray = new String[] {"John", "Mary", "Bob"};
//output: [John, Mary, Bob]
Run Code Online (Sandbox Code Playgroud) 我项目的首席开发人员已经将项目的toString()实现称为"pure cruft",并希望将它们从代码库中删除.
我已经说过这样做意味着任何希望显示对象的客户都必须编写自己的代码来将对象转换为字符串,但是回答"是的,他们会".
具体来说,这个系统中的对象是矩形,圆形等图形元素,当前表示是显示x,y,比例,边界等...
那么,人群在哪里撒谎?
什么时候你应该什么时候不应该实现toString?
我只是很想知道 - 为什么Arrays.equals(double [] [],double [] [])返回false?实际上,当数组具有相同数量的元素并且每个元素是相同的?
例如,我进行了以下测试.
double[][] a, b;
int size =5;
a=new double[size][size];
b=new double[size][size];
for( int i = 0; i < size; i++ )
for( int j = 0; j < size; j++ ) {
a[i][j]=1.0;
b[i][j]=1.0;
}
if(Arrays.equals(a, b))
System.out.println("Equal");
else
System.out.println("Not-equal");
Run Code Online (Sandbox Code Playgroud)
返回false并打印"不相等".
另一方面,如果我有这样的事情:
double[] a, b;
int size =5;
a=new double[size];
b=new double[size];
for( int i = 0; i < size; i++ ){
a[i]=1.0;
b[i]=1.0;
}
if(Arrays.equals(a, b))
System.out.println("Equal");
else
System.out.println("Not-equal");
Run Code Online (Sandbox Code Playgroud)
返回true并打印"Equal".该方法仅适用于单个尺寸吗?如果是这样,Java中的多维数组是否有类似的东西?