27日目②(2025.02.26) Stringクラス



次は「Stringクラス」についてです!!

Stringはこれまで幾度となく見てきたので、ここにきてテーマとして出てくるとは思いませんでしたが、僕が思っている以上に深いものなのだと思い菅原先生の説明に耳を傾けました。

【Stringクラスについて】

Stringクラスは、Javaのクラスの中で特別なクラス。

★「””」で囲まれた文字列はStringオブジェクトになる。
★「”~”」を使うと同じ文字列のオブジェクトが再利用される。

これらを説明するために例を出してくださいました。

String s1 = “Java”;
String s2 = new String(“Java”);
String s3 = “Java”;

本来、s2のように「new」でインスタンス化をすることが普通だけど、Stringの場合は、
“~”だけでいいとのこと。

newを使うと、同じ文字列でも格納されるメモリのアドレスが違う。

そのため、s1とs3は、同じメモリ領域だけど、s2は違うメモリ領域ということ。

そして、菅原先生のアドバイスとしては、
Stringオブジェクトは、”~”で生成することがおススメ。
理由:メモリの使用効率が良いから

だということです。

【boolean equals(Object obj)】

自文字列とobjの文字内容を比べる

★equals()メソッドは、2つの変数がもつ文字列の内容を比べる
★==演算子は、2つの変数の中身(アドレス値)を比べる

s1.equals(s2) → true
s1 == s2 → false
s1.equals(s3) → true
s1 == s3 → true



文字列の比較はequals()メソッドを使うように!!

「==」にすると、アドレス値を比べるので同じ文字列だったとしてもfalseになる。
しかも、コンパイルエラーにならないので、エラーを探したりするのも大変

たとえば、、、

ログイン時にパスワードを書いてもらう時。

入力したパスワードとデータベースに保存されているパスワードを比較して文字列が同じであればログイン、違っていれば再度ログイン画面を表示させる場合において、

if(s1.equals(s2)){
ログイン後の画面に移動
}else{
再度、ログイン画面に移動
}

「==」を使ってしまうと、パスワードが合っているにも関わらず永遠にログインできないという状況が発生する。

【Stringクラスのメソッド】

菅原先生がStringクラスのメソッドをいくつか紹介してくださいました。
現時点で覚える必要はないけれど、実際にコーディングしている時には、APIドキュメントを見て活用していけるようにとのこと。



そして、これまでの内容を菅原先生がコードを元に再度説明してくださいました。


substringメソッドはちょっと勘違いしそうなので、ここに記録しておきます。

substring(int begin,int end);
は、文字列のbegin番目からendの1つ前番目までの文字列を抽出。
substring(1,3)なら、1番目から2番目(3-1)までの文字列を抽出。

今回は現段階では分からない点はないです!!

引き続き楽しんでいこう!!!

コメントを残す