1. 概要

このチュートリアルでは、Javaエラー「intを逆参照できません」を詳しく見ていきます。 まず、作成方法の例を作成します。 次に、例外の主な原因について説明します。 そして最後に、それを修正する方法を見ていきます。

2. 実例

ここで、「Xを逆参照できません」というコンパイルエラーを生成する例を見てみましょう。

ここで、 X は、8つの Javaプリミティブの1つ、つまり int byte short long float double boolean 、およびchar

まず、クラス Test を作成し、intを他の値と比較します。

int x = 10;
System.out.println(x.equals(10));

ターミナルからコードをコンパイルすると、次のエラーが発生します。

$ javac Test.java
Test.java:8: error: int cannot be dereferenced
        System.out.println(x.toString());
                            ^
1 error

また、EclipseやIntelliJなどの最新のIDEは、コンパイルすらしなくてもエラーを表示します。

3. 原因

Javaでは、参照はオブジェクト/変数へのアドレスです。 間接参照とは、参照を介してオブジェクトの機能にアクセスするアクションを意味します。 プリミティブで逆参照を実行すると、「Xを逆参照できません」というエラーが発生します。ここで、Xはプリミティブ型です。 この理由はプリミティブはオブジェクトとは見なされません —それらは生の値を表します:

int x = 10;
System.out.println(x.equals(10));

ターミナルからコードをビルドすると、「intを逆参照できません」というエラーが表示されます。

ただし、 Object を使用すると、正常に機能します。

Object testObj = new Object();
testObj.toString();

ここで、 testObj はオブジェクトであり、testObj。演算子を使用してtoString()を呼び出すと、間接参照が発生します。 testObj はオブジェクトであるため、逆参照は機能します。

4. 解決

この例では、2つの値が等しいかどうかを確認する必要があります。

この問題の最初の解決策は、プリミティブ型にequals()の代わりに==を使用することです。

int x = 10;
System.out.println(x == 10);

コードを実行すると、「true」と出力されます。

2番目の解決策は、プリミティブをラッパークラスに変更することです。

Javaは、プリミティブ型ごとにラッパークラスオブジェクトを提供します。

たとえば、 equals()を使用する必要がある場合は、プリミティブ型をラッパーオブジェクトに変換できます。

Integer x = 10;
System.out.println(x.equals(10));

このエラーには、万能の解決策はありません。 ユースケースに応じて、上記の2つのソリューションのいずれかを使用する場合があります。

5. 結論

Javaの「intを逆参照できません」エラーについて説明しました。 次に、エラーの生成方法と例外の原因について説明しました。 最後に、エラーを解決するための解決策について説明しました。