Java 为什么在将ArrayList转换为字符串[]时list.toArray()是一个对象?

Java 为什么在将ArrayList转换为字符串[]时list.toArray()是一个对象?,java,arrays,string,arraylist,Java,Arrays,String,Arraylist,非常清楚地说,这不是这些问题的重复,而是与它们相关的问题。 假设我们有一个从ArrayList到String[]的转换方法,如我提到的第一个链接的答案所述: List<String> stockList = new ArrayList<String>(); stockList.add("stock1"); stockList.add("stock2"); String[] stockArr = new String[stockList.size()]; stockArr

非常清楚地说,这不是这些问题的重复,而是与它们相关的问题。 假设我们有一个从
ArrayList
String[]
的转换方法,如我提到的第一个链接的答案所述:

List<String> stockList = new ArrayList<String>();
stockList.add("stock1");
stockList.add("stock2");

String[] stockArr = new String[stockList.size()];
stockArr = stockList.toArray(stockArr);

for(String s : stockArr)
   System.out.println(s); 
但是,如果我希望我的输出是数组格式(比如
[stock1,stock2]
),并且我排除了对
字符串的转换,即接近末尾的for循环,该怎么办呢

如果我只打印
字符串[]
,它会给我一个垃圾值,比如
[Ljava.lang.String;@5636bc0a
。我想这可能是因为jvm将
返回数组作为对象存在问题

为什么会这样?这方面的工作是什么

我需要一个
String[]
来给我一个有意义的值。我需要这个格式,因为我正在使用这个转换来调用我的项目中的JAX-WS函数,它只接受
String[]
值:

myJaxWSObj.setValue(String[] myArrayOfStrings);
编辑

谢谢你们的回答,但你们中的一些人一定误解了这个问题。我想将ArrayList转换为String[],而不是String。因此,执行任何类型的
.toString()
都不会对我有多大帮助,因为正如我上面提到的,我需要调用一个只接受
String[]的JAX-WS类
值。因此问题不在于
系统.out.println()

假设我做了一个
.toString()
转换,我需要通过执行类似
stockArr.split(“”
)的操作将其转换回
String[]
。我想知道是否还有其他解决方法

编辑2


这与打印数组无关,它与将列表转换为字符串数组有关。

数组是对象。使用
System.out.println()打印它们将调用默认的
对象35; toString()
方法,该方法返回具有hashcode值的对象类名。要打印数组的字符串表示形式,请使用:

返回指定数组内容的字符串表示形式。如果数组包含其他数组作为元素,则它们将由继承自对象的
对象.toString()
方法转换为字符串,该方法描述它们的标识而不是它们的内容


有一个有用的库函数
Arrays.toString(arr)


因此,如果值是
字符串[]
,则需要一种打印有意义信息的方法。例如,如果您正在执行
System.out.println(stockArr)
,则希望显示数组的内容?是的,完全正确,而不是
[Ljava.lang.String;@5636bc0a
等等。这是否仅适用于您使用
System.out.println
时?从列表中选择字符串[]的正确方法是list.toArray(新字符串[list.size()]),因此您应该执行字符串sockArry=list.toArray(新字符串[list.size()])@Makoto不,它不仅适用于仍将返回对象值的
System.out.println
和@YaWang。感谢您的回复,但这不是我想要的,希望编辑现在能更清楚地说明这一点。@agenthost数组不是字符串。这是两种不同的类型。您不必将数组转换为字符串来传递给t函数。只需确保要打印值的人使用
数组即可。toString(数组)
。这与打印值无关!@agenthost我想你应该重新阅读我的答案。这就是为什么
toArray(String[]arr)
有效地返回一个对象。你看到的值
[Ljava.lang.String;@5636bc0a
只是这个数组作为对象的表示,但这并不意味着它不包含字符串值。自从我发布了这个答案后,这个问题有了一些变化
myJaxWSObj.setValue(String[] myArrayOfStrings);
String[] arr = { "a", "b" };
System.out.println(Arrays.toString(arr));
//Output: [a, b]