为何Scala中使用println打印Array会出现奇怪输出?
Scala打印Array内容异常解决方案
你看到的[I@xxxx格式输出是JVM中数组对象的默认toString返回值:[I标识对象为int类型一维数组,后面的十六进制字符串为对象的内存哈希地址。
可用解决方案
- 方案1:优先使用Scala原生
mkString方法,无额外导包,支持自定义格式
一维数组用法:
嵌套数组处理:val arr = Array(1, 2, 3) // 基础格式,自定义分隔符 println(arr.mkString(", ")) // 输出:1, 2, 3 // 带前后包裹符 println(arr.mkString("Array(", ", ", ")")) // 输出:Array(1, 2, 3)val nestedArr = Array(Array(1, 2), Array(3, 4)) println(nestedArr.map(_.mkString(", ")).mkString("Array(", ", ", ")")) // 输出:Array(1, 2, 3, 4) - 方案2:兼容Java的Arrays工具类方法,如果你熟悉Java的处理逻辑可以用
注意一维数组用Arrays.toString,多维数组必须用Arrays.deepToString,否则会报错或输出异常import java.util.Arrays val arr = Array(1, 2, 3) println(Arrays.toString(arr)) // 输出:[1, 2, 3] val nestedArr = Array(Array(1, 2), Array(3, 4)) println(Arrays.deepToString(nestedArr)) // 输出:[[1, 2], [3, 4]] - 方案3:针对你给出的List包含数组的场景,直接批量处理即可
你的输出示例为List([I@5ec77191, [I@4642b71d, [I@1450078a),对应处理代码:val list = List(Array(1, 2), Array(3, 4), Array(5, 6)) // 格式化整个列表输出 println(list.map(_.mkString("Array(", ", ", ")")).mkString("List(", ", ", ")")) // 输出:List(Array(1, 2), Array(3, 4), Array(5, 6))
内容的提问来源于stack exchange,提问作者Shiva ParsaRad
相关产品推荐
相关产品推荐

