Java中如何将double二维数组转换为显示所有值的字符串
问题解答
最优实现方案
直接使用JDK原生提供的java.util.Arrays.deepToString方法即可,这是代码量最少、不需要额外封装的实现方式:
import java.util.Arrays; public class ArrPrint { public static void main(String[] args) { double[][] a = {{1.0, 2.5, 3.2}, {4.7, 5.9, 6.1}}; System.out.println(Arrays.deepToString(a)); // 输出结果:[[1.0, 2.5, 3.2], [4.7, 5.9, 6.1]] } }
之前编译报错的原因
你之前碰到的编译错误:
incompatible types: double[] cannot be converted to java.lang.Object[]
完全是传参错误导致的,和deepToString是否支持二维double数组无关:
- Java中原始类型的一维数组(比如
double[]、int[])本身是引用类型,但不属于Object[]的子类,所以把一维double[]传入入参要求为Object[]的deepToString方法时,就会触发编译报错 - 二维原始类型数组
double[][]的本质是「元素为double[]类型引用的数组」,天然符合Object[]的入参要求,deepToString会递归展开所有层级的数组元素,不会输出无意义的对象地址哈希值。
其他方案的缺陷
- 直接使用
Arrays.toString处理double[][]时,方法只会遍历第一层数组元素,而第一层元素是double[]引用类型,会直接调用数组对象默认的toString()方法,输出就是[[D@64c25a62, [D@43e8f1c]这类看不到实际值的哈希字符串,没有实用价值。 - 你之前写的流处理方案不仅代码更冗长,还存在
Collectors.joining参数顺序写错的问题:joining三个参数的顺序是(分隔符, 前缀, 后缀),你原来写的collect(Collectors.joining("[", "," "]"))参数位置颠倒,还漏了参数分隔符,运行后输出格式完全不符合预期。就算修正参数写法,代码长度也远长于直接调用deepToString,没有任何优势。
内容的提问来源于stack exchange,提问作者Troy Daniels
相关产品推荐
相关产品推荐

