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
Worksheet:
val a = "hello\nworld" //> a : String = hello
//| world
val b = """hello
world""" //> b : String = hello
//| world
a == b //> res0: Boolean = true
Normal Scala code:
val a = "hello\nworld"
val b = """hello
world"""
println(a)
println(b)
println(a == b)
Output:
hello
world
hello
world
false
Why does the comparison yield true in the REPL and in the Worksheet, but false in normal Scala code?
Interesting, b
appears to be one char longer than a
, so I printed the Unicode values:
println(a.map(_.toInt))
println(b.map(_.toInt))
Output:
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)
Does that mean multi-line string literals have platform-dependent values? I use Eclipse on Windows.
I guess it's because of the source file encoding .
Try to check a.toList.length
and b.toList.length
. It seems b == "hello\\r\\nworld"
.
Multi-line string literal value depends not on the platform, but on the encoding of the source file. Actually you'll get exactly what you have in the source file between """
. If there is \\r\\n
you'll get it in your String
.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.