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

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

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

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

Q&A

解決済

3回答

2946閲覧

java 値/オブジェクト比較について

mahoken

総合スコア85

Java

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

0グッド

0クリップ

投稿2016/05/24 01:18

javaで値やオブジェクトの比較をよく行うと思うのですが、
== と equals で比較できるものできないものを具体的に教えていただきたいです。

例)
int型 == int型 true
String型 == String型 false
など、、

また、参考URLがあれば貼っていただけると幸いです、

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

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

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

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

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

guest

回答3

0

プリミティブ型(byte,short,int,long,float,double,char,boolean)にequalsは使えません(そもそもメソッドというものを持たない)。==を使っての比較になります。
Javaにおいてはその他はすべて参照型になります。プリミティブ値の配列も参照型です。==を使った場合、「両辺の参照型変数が参照しているオブジェクトが同じものである場合」のみtrueを返します。Stringの表す文字列が同じものでも、参照しているオブジェクトが異なる場合はfalseになります。(参照:文字列と文字列の比較)
参照型の中身が等しいかどうかを判定する場合はequalsメソッドを使います。ただし、equalsの判定はデフォルトでは==での比較と全く同じです。Stringなどの場合、適切に中身が等しいことを判定できるようにequalsメソッドをオーバーライドしています。自作クラスでequalsを使って比較したい場合、equalsメソッドを適切にオーバーライドする必要があります。

投稿2016/05/24 01:28

編集2016/05/24 01:33
swordone

総合スコア20651

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

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

mahoken

2016/05/24 02:27

なるほど! Stringクラス内でequalsがoverrideされていたのですか!! 非常に勉強になります! ありがとうございます。
guest

0

ベストアンサー

基本データ型
boolean,char,byte,short,int,long,float,double
は==で比較が可能です。
それ以外のデータ型はすべてequalsを使用してください。

投稿2016/05/24 01:27

yohira0616

総合スコア257

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

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

mahoken

2016/05/24 01:31

早急なご回答ありがとうございます!! new Object()で生成したインスタンス同士の比較はequalsということでよろしいでしょうか? 例) Employee emp1 = new Employee(name1); Employee emp2 = new Employee(name2); emp1.equals(emp2); という認識であってますでしょうか.
yohira0616

2016/05/24 01:41 編集

そうですね。ただし、自分で作成したクラス(Employee)等のequalsは自前でオーバーライドしてequalsメソッドを再定義しないと意図した比較ができないかもしれません。 ```java public class Employee{ private String name; private String jobRank; //setter,getter省略 @Override public boolean equals(Employee obj){ if(Objects.isNull(obj)){return false;} if(!obj instanseof Employee){return false;} if(this.name.equals(obj.getName())&& this.jobRank.equals(obj.getJobRank())){ return true; }else{ return false; } } } ``` 上の例では、EmployeeクラスのnameとjobRankが等しければそのオブジェクトは同一(equalsがtrueを返す)と定義しています。 equalsメソッドをオーバーライドする場合はjavaの一般契約に従うようにしてください。 参考:http://hjm333.hatenablog.com/entry/2015/08/22/150006
mahoken

2016/05/24 02:24

なるほど理解しました。 ありがとうございました!
swordone

2016/05/24 03:14

これ、引数がObjectでないので、オーバーライドじゃなくてオーバーロードですね。
mahoken

2016/05/24 04:43

>>swordone いろいろ試してみます!! ご助言ありがとうございます!
guest

0

java8の言語仕様に '=='が使える場合の説明(というより、規定)があります。(英語ですけど)
これ以外は equals を使うんじゃないでしょうか?

投稿2016/05/24 01:52

nob.

総合スコア711

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

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

mahoken

2016/05/24 02:28

見てみます! ありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問