- PR -

標準入力から入力された文字列について

1
投稿者投稿内容
Maverick
会議室デビュー日: 2004/12/28
投稿数: 11
投稿日時: 2008-06-23 14:26
初歩的な質問かもしれませんが、よろしくお願いします。

標準入力(コマンドプロンプト)から「abc」という文字列を入力して、
文字列リテラル"abc"と「==」で比較すると別物と判断されます。

しかし、String変数に文字列リテラル"abc"を直接入れたものと
リテラル"abc"を比較した場合は、同一と判断されます。

この違いはどういう意味なのでしょうか?
教えて下さい。

ちなみに標準入力から入力された「abc」も
文字列リテラルの「abc」も toCharArray() では同じ結果(97,98,99)が得られます。

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str1 = br.readLine(); // 画面から「abc」と入力
if (str1 == "abc") {
System.out.println("同一");
} else {
System.out.println("別物"); // 別物と判断される
}
String str2 = "abc" // コードから直接「abc」をセット
if (str2 == "abc") {
System.out.println("同一"); // 同一と判断される
} else {
System.out.println("別物");
}
progman
大ベテラン
会議室デビュー日: 2005/06/08
投稿数: 227
投稿日時: 2008-06-23 14:38
== はjava String の場合、equalsですね。
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2008-06-23 15:07
internプールについて調べると幸せになれるかもしれません。

http://www.google.co.jp/search?q=Java+intern%E3%83%97%E3%83%BC%E3%83%AB&btnG=%E6%A4%9C%E7%B4%A2
Maverick
会議室デビュー日: 2004/12/28
投稿数: 11
投稿日時: 2008-06-23 15:42
progmanさん、nagiseさん ありがとうございます。

質問の前に
if (str1.equals("abc"))
if (str1.toString() == "abc".toString())
も試してみて、さらに疑問が深まっての質問でした。

「internプール」については、これから調べてみます。
1

スキルアップ/キャリアアップ(JOB@IT)