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]