REPL:
scala> val a = "hello\nworld"
a: String =
hello
world
scala> val b = """hello
| world"""
b: String =
hello
world
scala> a == b
res0: Boolean = true
单:
val a = "hello\nworld" //> a : String = hello
//| world
val b = """hello
world""" //> b : String = hello
//| world
a == b //> res0: Boolean = true
普通Scala代码:
val a = "hello\nworld"
val b = """hello
world"""
println(a)
println(b)
println(a == b)
输出:
hello
world
hello
world
false
为什么比较在REPL和Worksheet中产生true,但在正常的Scala代码中为false?
有趣的是,b
似乎比a
长一个字符,所以我打印了Unicode值:
println(a.map(_.toInt))
println(b.map(_.toInt))
输出:
Vector(104, 101, 108, 108, 111, 10, 119, 111, 114, 108, 100)
Vector(104, 101, 108, 108, 111, 13, 10, 119, 111, 114, 108, 100)
这是否意味着多行字符串文字具有与平台相关的值?我在Windows上使用Eclipse。
答案 0 :(得分:4)
我想这是因为source file encoding。
尝试检查a.toList.length
和b.toList.length
。似乎是b == "hello\r\nworld"
。
多行字符串文字值不取决于平台,而取决于源文件的编码。实际上,您将获得"""
之间源文件中的确切内容。如果有\r\n
,您可以在String
中找到它。