Java“int/char 不能被取消引用”錯誤
一、概述
在本教程中,我們將仔細研究 Java 錯誤“int cannot be dereferenced”。首先,我們將創建一個如何生成它的示例。接下來,我們將解釋異常的主要原因。最後,我們將看看如何解決它。
2. 實例
現在,讓我們看一個生成編譯錯誤“X 無法取消引用”的示例。
這裡, X
表示八個 Java 原語之一,即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 cannot be dereferenced”
。
但是,使用Object
,它可以正常工作:
Object testObj = new Object();
testObj.toString();
在這裡, testObj
toString()
一個對象,取消引用發生在使用**.** testObj.
這不會產生任何錯誤,因為testObj
是一個對象,因此取消引用將起作用。
4.解決方案
在我們的示例中,我們需要檢查兩個值的相等性。
我們的問題的第一個解決方案是對原始類型使用==
而不是equals()
:
int x = 10;
System.out.println(x == 10);
當我們運行代碼時,它會打印“true”。
第二種解決方案是將原語更改為包裝類。
Java 為每個原始類型提供了包裝類對象。
例如,如果我們必須使用equals()
,我們可以將原始類型轉換為包裝對象:
Integer x = 10;
System.out.println(x.equals(10));
此錯誤沒有一刀切的解決方案。根據用例,我們可以使用上述兩種解決方案中的任何一種。
5. 結論
我們已經解釋了 Java 的“int cannot be dereferenced”
錯誤。然後,我們討論瞭如何產生錯誤以及異常的原因。最後,我們討論了解決錯誤的解決方案。