🙄

【Java Silver勉強】Stringは奥深い...

2023/10/19に公開
【前置き】
    メモ程度に簡単に書いて置くための物になっていますので、正確な情報をお求めの方は、
    別のサイトをお勧めいたします。

記述方法

初期化

//文字列型変数
String <変数名> = "<文字列>";
//インターン文字列型変数
String <変数名> = new String("<文字列>");

文字列型配列

String[] <変数名> = new String[];

文字列結合

// 「+」結合記号
String <変数名> = "<文字列>" + "文字列";
// concat関数による文字列結合
String <変数名> = "<文字列>".concat("<文字列>");

文字列操作

//文字数
String <変数名> = <文字列型変数>.length();
//文字列分割
String[] <変数名> = <文字列型変数>.split("<探索対象文字列 or 文字 or 正規表現");    
//文字列をインターン文字列に変換
String <変数名> = String.Intern(<インターン文字列型変数>);

特徴

Stringは文字列を変数に格納するための、修飾子になっています。

  • メモリの格納場所

    Stringには「文字列」と「インターン文字列」があり、この二つはメモリの格納場所が違うと僕は解釈しています。

    String str = "String";
    String in_str = new String("String intern");
    

    これだと、「==」を使って同一比較ができません。
    これを回避するために使うのが、「intern()」というメソッドになります。

  • intern()メソッド

    String str = "sample";                                  //文字列
    String in_str = new String("intern sample");            //インターン文字列
    String re_str = String.Intern(in_str);                  //インターン文字列 → 文字列
    
    System.out.println(str == in_str)                       //False
    System.out.println(str == re_str)                       //True
    

    このような感じで書いてあげると、文字列同士が同じかを比較してくれます。

  • 文字列同士の比較

    文字列同士を「==」で比較しても、「False」になってしまう... なんで?同じ文字列なのに...

    っていう時が来ると思います。
    こういうやつ↓

    String str1 = "sample";
    String str2 = "sample";
    
    System.out.println(str1 == str2);       //False
    



    なんで、同じ文字列なのにTrueが出力されないか。
    それは、文字列がメモリの同じアドレスにいないから、らしいです。

    アドレス番地
    100 sample
    200 sample

    こんな感じで、アドレスが違うと同一と認識されないらしいです。
    なのでこういう時に使うのが、「equals()」です。

    String str1 = "sample";
    String str2 = "sample";
    
    System.out.println(str1.equals(str2));       //True
    

    こうすることによって、別のアドレスであっても同じ値か比較してくれる同一比較をしてくれるらしいです。

まとめ

Stringはただの文字列を宣言をするためだけの修飾子だと思っていたけど、かなり奥深い修飾子だと気づかされました...
まだまだStringに対して、全然メモリのこととかメソッドの事とか未熟なのでどんどん調べていきます。

Discussion