質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

String

Stringは、ゼロ以上の文字から連続してできた文字の集合を扱うデータ型です。基本的にテキストを表すために使われます。

Q&A

解決済

1回答

2117閲覧

String型の比較について

oimo

総合スコア251

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

String

Stringは、ゼロ以上の文字から連続してできた文字の集合を扱うデータ型です。基本的にテキストを表すために使われます。

0グッド

0クリップ

投稿2014/04/25 17:17

String型の比較について質問です。
下記のコードで比較を行った場合、
結果がFalseになってしまいます。
理由を知っている方がいらっしゃいましたら、ご教示ください。

`
String str = new String("テスト文字");

if (str == "テスト文字"){
system.out.println("Trueになる");
} else {
system.out.println("Falseになる");
}

また、下記の違いもできればご教示ください。

String str = new String("テスト文字");
String str = "テスト文字";
`

お手数ですが、よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ご質問で使用している比較演算子【==】は値の比較となります。

String型は参照型となるので、下記のように擬似プリミティブとしてであれば結果がTrueとなります

`
String str = "テスト文字";

if (str == "テスト文字"){
system.out.println("Trueになる");
} else {
system.out.println("Falseになる");
}
`

結果がなぜ違うのかといいますと、下記例は参照型として初期化しているので
変数strには"テスト文字"という値を参照するためのアドレスが格納されています。
アドレス=="テスト文字"では結果がFalseです。

例)
■参照型で初期化
String str = new String("テスト文字");
下記例の場合、擬似プリミティブ型として変数strには"テスト文字"という値が直接
格納されているので結果がTrueとなります

例)
■擬似プリミティブ型で初期化
String str = "テスト文字";

本来参照型であればこのようなことはできないのですが、Stringは使用頻度が高いため、
javaのコンパイラが自動で補完してくれます。
このような行為をシンタックスシュガーと呼びます。
(この例に限りませんが)

参照型で初期化した場合、メモリ上にインスタンス生成時と初期化に使用した無名のStringインスタンス
の2つが存在するようになるため、擬似プリミティブとして初期化する事のほうが圧倒的に多いかと思います。

おまけですが、String型の比較ではequalsメソッドを用いるようにしましょう。

String str = "テスト文字"; if("テスト文字列".equals(str)){ system.out.println("Trueになる"); }

「str.equals("テスト文字列")」でも結果は同じですが、変数strがnullの場合、例外が発生するので
「"テスト文字列".equals(str)」こちらをお勧めします。

投稿2014/05/26 01:01

t.python

総合スコア73

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問