当我尝试将作为类成员的int []中的元素连接成String时,它可以正常工作。但是当我使用temp int [](从Arrays.copyOf生成)执行相同的过程时,我得到了乱码。我不明白为什么会这样。我的代码的简化版本如下:
import java.util.*;
import java.io.*;
public class Test {
public int[] arr;
public Test(int[] arr) {
this.arr = arr;
}
public void fn() {
// ...
int[] temp = Arrays.copyOf(arr, arr.length);
System.out.println(this);
System.out.println(temp);
}
/*
* Takes an integer array as input and returns a string representation
* of the elements in the array.
*/
public String arrayToString(int[] arr) {
String s = "[";
int i = 0;
while(i < (arr.length - 1)) {
s = s + arr[i++] + ", ";
}
s = s + arr[i] + "]";
return s;
}
public String toString() {
return arrayToString(this.arr);
}
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4};
Test test = new Test(arr);
test.fn();
/*
* Produces result:
* [1, 2, 3, 4]
* [I@3343c8b3
*/
}
}
为什么会这样?据我所知,arr和temp都应该是int []类型。
答案 0 :(得分:5)
您的本地副本将通过arrayToString()
发送,因为println(this)
会调用toString()
。
您的临时副本只是试图转储int[]
- 尝试使用arrayToString(temp)
代替println(temp)
。
答案 1 :(得分:2)
这是不必要的:
public String toString() {
return arrayToString(this.arr);
}
但您可以将其替换为:
public String toString() {
return Arrays.toString(this.arr);
}