我只想在没有任何内容的情况下写一个变量。到目前为止,这是我的代码。
if (inv[0] == null) {
inv[0]=map.getTileId(tileX-1, tileY-1, 0);
}
它给了我这个错误:
java.lang.Error: Unresolved compilation problem:
The operator == is undefined for the argument type(s) int, null
答案 0 :(得分:9)
inv是int[]
,int
不能是null
,因为它是primitive而不是引用。
int
在java中被初始化为零。
答案 1 :(得分:5)
我假设inv
是int[]
。
数组中没有“现有”值这样的概念。例如:
int[] x = new int[5];
与完全的内容相同:
int[] x = new int[5];
x[3] = 0;
现在,如果您使用了Integer[]
,则可以使用空值来表示“未填充”...是您想要的吗?
数组总是用要开始的元素类型的默认值填充 - 对于null
等引用类型,它是Integer
。
答案 2 :(得分:2)
我认为inv
是int[]
。您无法将int
与null
进行比较,null
仅适用于引用类型,而不适用于基元。您必须为其指定某种标记值(0
受欢迎,并且在创建数组时默认具有该值),或者将inv
改为Integer[]
(Integer
是引用类型,null
- 能够。
答案 3 :(得分:2)
我假设从错误消息中,inv[]
是int
的数组,并且java中的int
不是对象,因此它不能具有null
值。你必须将它与0
(空int数组的每个索引的默认值)进行比较..
答案 4 :(得分:0)
Java中的原语不能为空。
答案 5 :(得分:0)
嗯...... int
是原始类型。那不能是空的。
您可以检查数组的大小:
int [] arr = new int [10]; System.out.println(arr.size());
普通数组的索引从0到它们的大小 - 1,并且不能丢失任何值。
因此,在您的代码中,您要问的是int
类型的第一个成员是null
,这是不可能发生的 - 要么是数字,要么导致ArrayOutOfBoundsException
。
如果你想拥有一个类似于PHP或JavaScript的“稀疏数组”,你需要一个Map
:
Map<Integer, Integer> map = new HashMap();
map.put( 1, 324 );
if( map.get( 2 ) == null ) ...
答案 6 :(得分:0)
你可以试试这样的事情
Integer[] inv = new Integer[10];
inv[0] = 1;
inv[1] = 2;
....
if(inv[3] == null)
{
inv[3] = getSomeValue();
}
答案 7 :(得分:0)
错误是因为inv
是int
的数组,而不是对象包装器Integer
。无论如何,你的阵列都会为你初始化。如果你写了
int[] inv = new int[5];
你将有一个5个零的数组。
您应该使用一些您知道无效的值来自己初始化数组(例如,如果您有一个年龄数组,则负值将无效)。检查无效值,如果有,请将其替换。
答案 8 :(得分:-1)
原始类型无法与null进行比较。
您可以测试数字是否&gt; 0以查看是否存在值:
if(inv[0] <= 0)
{
inv[0]=map.getTileId(tileX-1, tileY-1, 0);
}