Java ~StringクラスとStringBuilderクラスの違い~

最近、鬼滅の刃という作品がすごく人気と知り、読んでみたい!と思いTSUTAYAへ行きました。しかし、人気作品ということもあり、全巻借りられていました。えっ!1〜17巻の内一冊も残ってないの?凄まじい人気ですね。。。なんだか、鬼滅の刃読みたい欲がそそられる結果となりました。

その後は、コメダ珈琲にてミニシロノワールプリンを食べながら、Javaの勉強をしていました。カラメルソースとプリンにあのデニッシュ生地ですからね、美味しいに決まってます。すごい美味しかったです🥰

本日は、Javaの内容からStringクラスとStringBuilderクラスの違いをまとめたいと思います。

 

 StringクラスとStringBuilderクラスの違い

Stringクラス

f:id:torimilar:20191208223559p:plain

 Stringクラスの場合インスタンス内の文字列を変更することができないため、s="Hello"の文字列は変更することができません。concatメソッドで"HelloWorld"を生成していますが、sの文字列は変更されず"Hello"のままであることがわかります。

 

  • equalsメソッドの比較対象が文字列

f:id:torimilar:20191208223642p:plain

Stringクラスにおいてequalsメソッドを使用した場合、比較対象は文字列となるため、s1("Hello")とs2("Hello")の比較はtrueとなり、s1("Hello")とs3("World")の比較はfalseとなります。 

 

StringBuilderクラス

f:id:torimilar:20191208223724p:plain

StringBuilderクラスの場合、インスタンス内の文字列を変更できるため、s="Hello"の文字列を変更することができます。appendメソッドで"HelloWorld"に変更できることがわかります。

 

  • equalsメソッドの比較対象が参照先

f:id:torimilar:20191208223834p:plain

 StringBuilderクラスにおいてequalsメソッドを使用した場合、比較対象は参照先となるため、s1("Hello"を保持するインスタンスへの参照)とs2("Hello"を保持するインスタンスへの参照)の比較となります。同じ値の比較に見えますが 、あくまで比較しているのは値ではなく、参照先です。s1、s2に格納されているのは、それぞれnewで新たに生成されたインスタンスへの参照先となり、結果はfalseとなります。

下の絵のように、参照先がそれぞれ違うのです。(絵下手ですみません。。)

f:id:torimilar:20191208230005p:plain