teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

追加

2020/07/30 10:03

投稿

amiya
amiya

スコア1218

answer CHANGED
@@ -3,4 +3,20 @@
3
3
 
4
4
  `res.equals(mozi)`自体が比較になり、戻り値としてその真偽が返されますので、
5
5
  それによって動作を変えたい場合は、
6
- `if(res.equals(mozi))`といった風にしてください。
6
+ `if(res.equals(mozi))`といった風にしてください。
7
+
8
+
9
+ `if(res == mozi)`の比較について。
10
+ JAVAのString型をはじめとしたオブジェクト型の変数は、参照型というタイプの変数になっています。
11
+ 参照型の変数は、直接その中にデータを保存しているのではなく、データは別の場所にインスタンスとして保存され、その場所を参照するための数値(参照値)だけを記録しています。
12
+ その為、`res == mozi`と書いた場合、
13
+ res変数が参照している文字列オブジェクトのインスタンスの場所と、
14
+ moji変数が参照している文字列オブジェクトのインスタンスの場所と、
15
+ という二つの場所の値での比較となります。
16
+ たとえ内容が同じであっても、それぞれ別のデータとして別の場所に保管されていますので、この二つの比較は`false`となります。
17
+ (同じデータをまとめて一つにする最適化の結果`true`になることもありますが内容の比較にはなりません)
18
+ なので、string型の内容を`==`で比較することはできません。
19
+
20
+ ただし、今回のように一文字だけの比較であれば、双方ともに、char型にすることで、
21
+ char型どうしは、`==`で比較が可能です。
22
+ (char型はプリミティブ型といわれるデータを直接変数に保存するタイプなので)

3

追加

2020/07/30 10:03

投稿

amiya
amiya

スコア1218

answer CHANGED
@@ -1,2 +1,6 @@
1
1
  String同士の比較には、equalsメソッドを使います。
2
- `res.equals(mozi)`で二つの文字列の内容の比較ができます。
2
+ `res.equals(mozi)`で二つの文字列の内容の比較ができます。
3
+
4
+ `res.equals(mozi)`自体が比較になり、戻り値としてその真偽が返されますので、
5
+ それによって動作を変えたい場合は、
6
+ `if(res.equals(mozi))`といった風にしてください。

2

修正

2020/07/30 09:45

投稿

amiya
amiya

スコア1218

answer CHANGED
@@ -1,1 +1,2 @@
1
- すみせん書き直しま
1
+ String同士の比較には、equalsメソッドを使います
2
+ `res.equals(mozi)`で二つの文字列の内容の比較ができます。

1

修正

2020/07/30 09:18

投稿

amiya
amiya

スコア1218

answer CHANGED
@@ -1,2 +1,1 @@
1
- 既にやっているように、あとから入力した文字も、`mozi.charAt(0)`でcharに変換すればよいのでは。
2
- 入力は一文字固定っぽいので、2文字以上の時点で外れか、それ以降の入力は無視るとて。
1
+ みません書き直ます