くわこのpermission denied.

WEBエンジニアの僕がぶつかった技術的な問題や発見

scalaのcharとstringの比較で??となった話

Scalaでたまにコード書くんですが、charとstringの違い知らなかったので(というかほぼchar使ったことなかった)メモ

驚いたのが

val str = "aaa"
println(str(0) == "a")

これってfalseなんですよね。
こんな感じのwarningがこっそり出てて
> warning: comparing values of types Int and java.lang.String using `==' will always yield false

で意味わからん...と思ったらstr(0)はstr.charAt(0)でStringをcharに変換した上で0文字目を出力するらしく、返り値がchar型なんですよね。
というわけで以下まとめ

object Sample extends App {
  val numStr = "123"
  println(numStr(0)) // 1
  println(numStr(0) == "1") // false
  println(numStr(0) == '1') // true
  println(numStr(0).getClass) // char
  println("1".getClass) // class java.lang.String
  println("1"(0).getClass) // char
  println('1'.getClass) // char
}

普通に知らんかった

参考
d.hatena.ne.jp