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

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

新規登録して質問してみよう
ただいま回答率
85.48%
参照

参照は、プログラミングにおいて変数や関数といったメモリ空間上での所在を指示するデータのことを指します。その中にはデータ自体は含まれず、他の場所にある情報を間接的に指示するプログラムです。

Java

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

String

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

Q&A

1回答

776閲覧

String型の文字列とString型の配列に格納された文字列の比較方法がわからない

DaisukeYomo

総合スコア1

参照

参照は、プログラミングにおいて変数や関数といったメモリ空間上での所在を指示するデータのことを指します。その中にはデータ自体は含まれず、他の場所にある情報を間接的に指示するプログラムです。

Java

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

String

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

0グッド

2クリップ

投稿2022/10/18 05:21

前提

javaでString型での文字列の取り扱いと、等価演算子「==」と、equalsメソッドの違いについて学習しています。以下のソースコートを実行すると、出力結果が「あり得ない?」になります。
String型と、配列が参照型で、「==」を使うと値ではなく参照している場所を比較することは理解しているのですが、forループ内でi=2となった時、なぜ、「myname == myNames[2]」がtrueと評価され、現在の出力結果になるかがわかりません。なぜ、そうなるか、様々な情報を調べましたが、謎が解けていません。なぜここの「myname == myNames[2]」がtrueになるのか、説明がつくようにしたいので、知識を貸してください。お願いします。

実現したいこと

「myname == myNames[2]」がなぜtrueと評価されるのか理解したい

該当のソースコード

言語:java

public class main {
/**
* @param args
*/
public static void main(String[] args) {
String myname = "佐藤";
String[] myNames = {"伊藤","加藤","佐藤"};

for(int i=1; i < myNames.length; i++){ if(myname == myNames[i]) { System.out.println("あり得ない?"); } else if(myname.equals(myNames[i])) { System.out.println("myname:"+myname); } } }

}

試したこと

デバッグを行い、一行ずつ見てみましたが、わかりません

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

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

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

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

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

guest

回答1

0

==で比較されるのは参照であり、内容を比較したいときはequalsを使う、
というだけであって別々の場所で書いた文字列同士で参照が同じになるケースもあります。

今回のように同じ文字列リテラルを書いたとき、わざわざ別のインスタンスを生成するのは無駄なので、
インスタンスを使い回すことがあります。

投稿2022/10/18 05:28

編集2022/10/18 06:01
ozwk

総合スコア13521

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問