首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么println(array)在Scala中有奇怪的输出?

在Scala中,println(array)可能会产生奇怪的输出,这通常是因为数组的默认打印方式。Scala中的数组是Java数组的封装,当使用println打印数组时,它会调用数组的toString方法。Java数组的toString方法返回的字符串是由数组的元素组成的,元素之间用逗号分隔,并且整个数组被方括号包围。例如,对于一个整型数组Array(1, 2, 3),其toString方法返回的字符串将是"[1, 2, 3]"

然而,如果你看到的是类似[I@12345678这样的输出,这表示你正在查看数组的哈希码,而不是它的内容。这是因为Scala在打印数组时,默认调用了对象的toString方法,而不是专门为数组定制的打印方法。在这种情况下,@符号后面的数字是数组对象的哈希码。

原因

这种奇怪的输出是因为默认情况下,Scala使用对象的toString方法来打印数组,而不是显示数组的内容。

解决方法

为了避免这种奇怪的输出,你可以使用以下几种方法之一:

  1. 转换为字符串:使用mkString方法将数组转换为字符串,这样可以控制输出的格式。
  2. 转换为字符串:使用mkString方法将数组转换为字符串,这样可以控制输出的格式。
  3. 使用集合方法:如果你的数组实际上是一个集合(如ArrayBufferList),你可以直接打印集合对象,因为它们有更好的打印支持。
  4. 使用集合方法:如果你的数组实际上是一个集合(如ArrayBufferList),你可以直接打印集合对象,因为它们有更好的打印支持。
  5. 自定义打印方法:你可以编写一个自定义的打印方法来处理数组的输出。
  6. 自定义打印方法:你可以编写一个自定义的打印方法来处理数组的输出。

应用场景

这种奇怪的输出通常出现在调试过程中,当你试图查看数组的内容时。了解如何正确打印数组对于调试和日志记录是非常有用的。

参考链接

通过上述方法,你可以有效地解决println(array)在Scala中产生奇怪输出的问题,并且能够以更友好的方式查看数组的内容。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Scala基础入门(九)Scala 方法中缀表示法、后缀表示法

Scala 编程规范中,有一些很有意思的规则。合理地使用这些规则,可以帮助我们编写更简洁更有效的代码。 Scala 方法调用 一般来说,Scala中的方法调用遵循Java惯例。...调用target的foo方法示例如下: foo(42, bar) target.foo(42, bar) target.foo() 在 Scala 2.8 版本中,开始支持命名参数。...方法调用中命名的参数应该作为常规参数处理(相应的间距,以逗号为间隔),在等号的两边各有一个空格。...; } } 输出结果为: 无参方法被调用! 无参方法被调用! 中缀表示法 Infix notation Scala 有一种特殊的方法调用只有一个参数的方法。...// 推荐使用 a + b // 有效,但是可读性不好 a+b // 有效, 但是给人感觉很奇怪 a.

46420
  • scala(六) 高阶函数

    哈哈确实是,但是这种思想,我们应该要明白,否则看到别人的写的函数以这样的形式都不知道啥意思就奇怪了。 ---- 对高阶函数有了一定了解后,就来玩玩scala中的高阶函数;看看他你能玩出什么花来。...sacla 中有很多地方都会用到下划线_;其用途很强大的,就说说这里的_的作用。在这里,它可以作为一个参数,拿_/_为例,第一个_就代表参数x的值,第二个_就代表参数y的值。...// 调用 val result=calculator(12,4,(x,y)=>x+y) // 输出结果 println(result) 如果函数的参数在函数体中,只使用过一次,...val result=calculator(12,4,(x,y)=>y-x) 如果函数体中有(),函数的参数在函数中小括号中以表达式形式存在,此时不能用小括号代替。...) (下划线的方式:,Demo02$$$Lambda$7/932607259@67b64c45) 思考:为什么输出的是 Demo02$$$Lambda$7/932607259@67b64c45?

    68210

    大数据技术之_16_Scala学习_07_数据结构(上)-集合

    ArrayBuffer(1, 2, 3, 123) 10.5.3 多维数组的定义和使用 说明 // 定义 val arr = Array.ofDim[Double](3, 4) // 说明:二维数组中有三个一维数组...,每个一维数组中有四个元素 // 赋值 arr(1)(1) = 11.11 示例代码如下: package com.atguigu.chapter10.array object MultiplyArray...()     println(arrList) // 输出 [1, 2, 3]   } } 输出结果如下: [1, 2, 3] 10.6.2 Java 的 List 转 Scala 数组(mutable.Buffer...在 scala 中,List 就是不可变的,如需要使用可变的 List,则需要使用 ListBuffer     // 3. ... 类型支持 Any     // 3.在 Map 的底层,每对 key-value 是元组 Tuple2     // 4.从输出的结果看到,输出顺序和声明顺序一致     val map1 = Map

    1.3K10

    大数据技术之_16_Scala学习_04_函数式编程-基础+面向对象编程-基础

    4、函数式编程中,最重要的就是函数。 5.3 为什么需要函数 ? 学习一个技术或者知识点的流程: ? 5.4 函数的定义 5.4.1 函数的定义 ?...在 catch 中有多个 case, 每个 case 可以匹配一种异常       // 3. => 关键符号,表示后面是对该异常的处理代码块       // 4. finally 最终要执行的代码...}     System.out.println("继续执行")   } } 输出结果如下: 捕获了除数为零的算数异常 scala finally 继续执行 5.10.5 Scala 异常处理小结   ... new ArithmeticException("算术异常")   } } 输出结果如下: 捕获到异常是:算术异常 继续执行001 继续执行002   4、在 Scala 里,借用了模式匹配的思想来做异常的匹配...Java 与 Scala 在函数层面上的不同体现: // 在 Java 中 函数(接收参数) // 在 Scala 中 集合.函数(函数) 如下图所示: ?

    2.2K10

    大数据技术之_16_Scala学习_02_变量

    (要记住)2.15.3 标识符举例说明2.15.4 标识符命名注意事项2.15.5 Scala 关键字2.16 作业01 ---- 第二章 变量   为什么需要变量:一个程序就是一个世界,在 scala... Int = 3 // 定义一个整型变量,取名 b,并赋初值3       b = 89 // 给变量 b 赋 89       println("a=" + a) // 输出语句,把变量 a 的值输出...      println("b=" + b) // 把变量 b 的值输出   } } 2.2 Scala 变量的介绍 2.2.1 概念 变量相当于内存中一个数据存储空间的表示,你可以把变量看做是一个房间的门牌号...对上图的小结和整理 1、在 scala中有一个根类型,它是所有类的父类。 2、scala 中一切皆为对象,分为两大类 AnyVal(值类型)和 AnyRef(引用类型),它们都是 Any 的子类。...var _ = "jack"     // println(_) // 错误,因为在scala中,下划线有很多其他的作用,因此不能使用。

    1.2K40

    spark开发基础之Scala详解apply方法

    参数N) 通常这样一个方法返回的是伴生对象。 举例来说:Array对象定义了apply,我们可以用下面形式来数组 Array("about”,"yun","com") 为什么不使用构造器?...val acct=Account (1000.0) 我们在来看一个例子 package aboutyun.com class ApplyTest{ def apply()=println("I...(补充:Scala中同名和类和对象分别称之为伴生类和伴生对象) 为了加深理解,我们在换另外一个说法 半生对象中有一个apply方法 构造类的时候一般不用new A() 上面不知你是否理解,这样我们在反过来...显然这样是不行的。但是在Scala中,很多类默认都是由伴生对象的,所以我们可以简化类的实例。这样apply方法你是否理解了。...f(3),就是 f.apply(3) ######################## apply方法具有查找属性 集合类 在Scala集合一文中提到过Iterator迭代器的几个子trait包括

    2.2K60

    分布式机器学习:如何快速从Python栈过渡到Scala栈

    等等,因为工作需要使用spark,所以理所应当的开始学习pyspark; 之后一方面团队其他成员基本都是用scala,同时在Spark API更新上,pyspark也要慢于scala的,而且对于集群维护的同事来说...,true,"nemo")) print(arr+"\t") println() // for循环高级技巧:单个for中有多个变量,每个生成器都带过滤条件 // 效果就是嵌套for循环 for (i...同样的ListBuffer是List的可变版本; 字典 字典在Scala中叫做映射; val map1 = Map("k1"->10, 2->1.5, 3.3->"abc") println(map1)...; 外部数据 这里有一个很大的问题,如果你的数据中的列名有中文,那么建议全部重命名为英文,否在在构建SQL表达式等地方会报错,奇怪的是这部分在Python中倒是正常的,这个坑也填了好久。。。。...列表推导式可以由Scala的for (....) yield ....来替换,注意to和until的区别; 表达式部分千万千万不要用中文,都是泪啊,我是因为之前数据集中有一部分列是外部数据,用的中文,天坑

    1.2K20

    机器学习:如何快速从Python栈过渡到Scala栈

    等等,因为工作需要使用spark,所以理所应当的开始学习pyspark; 之后一方面团队其他成员基本都是用scala,同时在Spark API更新上,pyspark也要慢于scala的,而且对于集群维护的同事来说...fib(f-1) println(fib(1),fib(2),fib(3),fib(4),fib(5)) // 在scala中,函数也是一种变量类型,因此也同样可以赋值为某个常量或者当作另一个函数的参数...同样的ListBuffer是List的可变版本; 字典 字典在Scala中叫做映射; val map1 = Map("k1"->10, 2->1.5, 3.3->"abc") println(map1)...; 外部数据 这里有一个很大的问题,如果你的数据中的列名有中文,那么建议全部重命名为英文,否在在构建SQL表达式等地方会报错,奇怪的是这部分在Python中倒是正常的,这个坑也填了好久。。。。...列表推导式可以由Scala的for (....) yield ....来替换,注意to和until的区别; 表达式部分千万千万不要用中文,都是泪啊,我是因为之前数据集中有一部分列是外部数据,用的中文,天坑

    1.8K31

    scala(四) For循环控制

    范围数据循环 范围遍 to 语法: for(i <- 0 to 10){语句块} to :表示包含结尾,会将10也输出来 def main(args: Array[String]): Unit...我们常用做法就是在循环外部定义一边数组或集合,把符合条件的结果写入到集合中,最后返回集合。对于这种场景,无论是python还是scala都有yeild实现。...i=8 i=9 循环中断 在 java 中有break 和continue 关键字,实现循环中断 break:终止整个循环 continue:结束当次循环 在 scala 中并没有 break 和continue...scala中使用 breakable 控制结构来实现 break 和 continue 功能。 在 scala 中 已经用 循环守卫 更好的代替了 continue 关键字。...在 scala 语言中,breakable 底层实现就是采用 异常的方式,代替了 break 。 def break(): Nothing = throw breakException

    91820

    Scala编程基础01

    二.为什么要学Scala 1.优雅:这是框架设计师第一个要考虑的问题,框架的用户是应用开发程序员,API是否优雅直接影响用户体验。...()     val m = if (x > 2) 1     println(m)     //在scala中每个表达式都有值,scala中有个Unit类,写做(),相当于Java中的void    ...>= 1) 1 else -1     println(k) 4.块表达式 val x = 0     //在scala中{}中课包含一系列表达式,块中最后一个表达式的值就是块的值     //下面就是一个块表达式...    println(result) 5.循环 在scala中有for循环和while循环,用for循环比较多 for循环语法结构:for (i <- 表达式/数组/集合)   //for(i <-...(i <- 数组)     val arr = Array("a", "b", "c")     for (i <- arr)       println(i)     //高级for循环     //

    14110

    Scala基础语法

    ,在Scala中鼓励使用val     var s = "hello" //Scala编译器会自动推断变量的类型,必要的时候可以指定类型 //变量名在前,类型在后     val str: String...//如果缺失else,相当于if (x > 2) 1 else ()     val m = if (x > 2) 1     println(m) //在scala中每个表达式都有值,scala中有个... {     val x = 0 //在scala中{}中课包含一系列表达式,块中最后一个表达式的值就是块的值 //下面就是一个块表达式     val result = { if (x println(result)   } } Scala的循环表达式 在scala中有for循环和while循环,用for循环比较多。...    val v = for (i <- 1 to 10) yield i * 10     println(v)   } } Scala的调用方法和函数 Scala中的+ - * / %等操作符的作用与

    63430

    Scala语言快速了解一下?

    them evaluated.Type :help for more information.scala> 1 + 1res0: Int = 2在Scala将代码定义到某个包中有两种方式,第一种方法和..._,这里也能解释,为什么以scala开头的包,在使用时都是省去scala.的。如果想要引入包中的几个成员,可以使用selector(选取器):import java.awt....在 Scala 中声明变量和常量不一定要指明数据类型,在没有指明数据类型的情况下,其数据类型是通过变量或常量的初始值推断出来的。...( "Value of a: " + a ); println( "Value of b: " + b );}执行以上代码输出结果为:$ scalac Test.scala$ scala TestValue...执行以上代码,输出结果如下:$ scalac Test.scala $ scala Test在 delayed 方法内获取时间,单位为纳秒参数: 241550840475831获取时间,单位为纳秒实例中

    3K102

    Spark常用的算子以及Scala函数总结

    Spark与Scala 首先,介绍一下scala语言: Scala 是一种把面向对象和函数式编程理念加入到静态类型语言中的混血儿。 为什么学scala?...spark提供了R、Python等语言的接口,为什么还要重新学一门新的语言呢?...一般新版本都是最先支持scala,虽然现在python的接口也在不断的丰富 4、到了工作岗位,你的师父(都是有几年相关经验的),前期由于python的支持还没有像scala那样完善,因此会从scala...新手学习Spark编程,在熟悉了Scala语言的基础上,首先需要对以下常用的Spark算子或者Scala函数比较熟悉,才能开始动手写能解决实际业务的代码。...[优化代码的最基本思路] (1)当采用reduceByKeyt时,Spark可以在每个分区移动数据之前将待输出数据与一个共用的key结合。借助下图可以理解在reduceByKey里究竟发生了什么。

    4.9K20
    领券