每当我尝试使用二进制运算符将两个非布尔类型设置为彼此相等时,我基本上都会在输出屏幕上看到这个
我不明白的是,如果编译器继续编译它,但显示[I@60e53b93(这在我看来是一个地址),是因为它将arr作为对象使用还是因为它实际上正在工作并且循环正在无限运行?
所以我想做的只是尝试数组,看看我能用它们做些什么,因为我已经有一段时间没有使用Java了。
我所做的就是:
int [] arr = {1,2,3,4,5,6};
int[]arar={1,2,3,4,5,6};
while (arar==arr){
arr[0]=2;
}
System.out.println(arr);
,所以我基本上期待一个红旗,但随后代码运行并显示[I@60e53b93,我不明白为什么?
有人能解释一下这个给我,如果可能的话,我怎么能显示数组arr,即使它是在一个连续的循环?
这里发生了两件事:
arr
永远不会等于arar
,因为==
使用参考相等;由于arr
和arar
可以单独修改,所以它们不是同一个对象。System.out.println(anyArray)
将始终显示您的输出,因为数组没有一个有用的toString
函数。
可以通过使用数组中的静态方法来解决这两个问题:
while (Arrays.equals(arr, arar)) {
...
}
System.out.println(Arrays.toString(arr));
因为arr
只是一个数组的引用。不这是数组的内容。引用保存数组实际内容所在的内存位置。在对象上调用toString()
将默认输出其内存位置。(toString()
将隐式地被System.out.println
调用)
Java中的每个对象都有一个toString()
方法。尽管你基本上可以调用System.out.println
。一些对象有一个自定义的toString
实现并打印一些有用的东西,而其他对象(如数组)只是打印它们的内存位置。
如果你想显示数组的内容,你必须遍历数组:
for(int elem : arr) {
System.out.println(elem);
}