ホームページ >Java >&#&チュートリアル >Java で == は何を意味しますか?

Java で == は何を意味しますか?

(*-*)浩
(*-*)浩オリジナル
2019-05-21 16:56:2111878ブラウズ

関係演算子「==」は何を比較するのですか?

次の文は、書籍「Java プログラミング思考」からの抜粋です:「関係演算子はブール結果を生成し、オペランドの値間の関係を計算します。」

この文は簡単そうに見えますが、注意深く理解する必要があります。簡単に言うと、==は値が等しいかどうかを比較するために使用されます。

いくつかの例を見てみましょう:

public class Main {
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub 
        int n=3;
        int m=3;        
        System.out.println(n==m);        
        String str = new String("hello");
        String str1 = new String("hello");
        String str2 = new String("hello");        
        System.out.println(str1==str2);        
        str1 = str;
        str2 = str;
        System.out.println(str1==str2);
    }
}

出力結果は次のとおりです:

true 
false
true

n==m結果は次のとおりですtrue 、これは理解しやすいですが、変数 n と変数 m に格納される値は両方とも 3 であり、等しい必要があります。 str1 と str2 の 2 つの比較結果が異なるのはなぜですか?これを理解するには、基本データ型変数と非基本データ型変数の違いを理解するだけで済みます。

これら 8 つの基本データ型の変数は、変数に直接「値」が格納されているため、関係演算子 == で比較する場合は「値」そのものが比較されます。浮動小数点型と整数型はどちらも符号付き型ですが、char 型は符号なし型であることに注意してください (char 型の値の範囲は 0~2^16-1)。例:

int n=3;
int m=3; 
変数 n と変数 m は両方とも値「3」を直接格納するため、== と比較すると、結果は true になります。 非基本データ型の変数の場合、一部の書籍では参照型変数と呼ばれます。たとえば、上記の str1 は参照型変数です。参照型変数は、「値」そのものではなく、それに関連付けられたオブジェクトのアドレスをメモリに格納します。

たとえば、次のコード行:

String str1;
この文は、現時点ではどのオブジェクトにも関連付けられていない参照型変数を宣言しています。

new String("hello") を使用してオブジェクト (String クラスのインスタンスとも呼ばれる) を生成し、このオブジェクトを str1 にバインドします。

str1= new String("hello");
次に、str1オブジェクトを指します (str1 は、多くの場所でオブジェクトへの参照とも呼ばれます)。このとき、変数 str1 には、「値」そのものではなく、メモリ内の指すオブジェクトの格納アドレスが格納されます。文字列「hello」は直接保存されないこと。ここでの参照は、C/C のポインターに非常に似ています。 したがって、== を使用して str1 と str2 を初めて比較すると、結果は false になります。したがって、それらはそれぞれ異なるオブジェクトを指します。これは、それらが実際に格納されるメモリアドレスが異なることを意味します。

2 番目の比較では、str1 と str2 の両方が str が指すオブジェクトを指しているため、結果は間違いなく true です。

以上がJava で == は何を意味しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。