7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Kotlinの文字列連結はStringBuilderが使われるという話(タイトル変更済み)

Last updated at Posted at 2019-04-05

少し気になったので文字列連結("${this} is a pen." みたいなこと)のパフォーマンスについて調査してみました。
結果、Javaと同様StringBuilderやStringBufferを使った方がよいという結果でした。

たぶん "${this} is a pen." みたいなことをしたときには、
Java的には "this" + " is a pen." になってんだろうなぁ。

文字列連結においてもKotlinではStringBuilderに変換されていたので、
無理にStringBuilderを使っても問題ないというのがわかりました。

fun main(args: Array<String>) {
    var before = System.currentTimeMillis()
    
    for (i in 0..10000) {
        val test = "a b $i a b $i fdsafda $i"
    }
    
    println("case A =${System.currentTimeMillis() - before}ms")
    
    before = System.currentTimeMillis()
    
    for (i in 0..10000) {
        val buf = StringBuilder().also {
            it.append("a b ")
            it.append(i)
            it.append(" a b ")
            it.append(i)
            it.append(" fdsafda ")
            it.append(i)
        }
        val test = buf.toString()
    }
    
    println("case B =${System.currentTimeMillis() - before}ms")
}
case A =46ms
case B =23ms

些細な差ではあるが、パフォーマンス重要視してるプロジェクトではこういうのが大切だったりするんだろう。
差分があるように見えるのはJVM起動後などが遅かったりGCが走ったりといろいろな要因があるようです。

@sdkei さん、ありがとうございました!!)


StringBuilderって使うと結構可読性下がっちゃってめんどくせぇなぁって思ってたので、
結局同じことになるのであれば"${this} is a pen." みたいなように書くようにしよ。

7
2
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?