如何在Java中检查变量是否存在?

5

如果变量中没有任何内容,我希望写入一个变量。这是我的代码。

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

2
inv[] 看起来像是一个 int 数组,而 int 类型作为原始类型,不能为 null。 - Bala R
int不能为null,它是一个原始类型。 - RMT
9个回答

9

inv是一个int[],而int不能为null,因为它是一个原始数据类型而不是一个引用。在Java中,int被初始化为零。


这并不完全正确。原始类型 int 仅在具有类作用域时初始化为零。在方法(或更严格的作用域)中声明的 int 保持未初始化状态。 - Paul
@Paul,一个新的int值数组将全部为零。关于常规本地int变量,它们需要在使用之前进行初始化,因为明确赋值的规则。Java编译器将防止未初始化就使用本地变量的编译。 - Atreys

5
我假设inv是一个int[]数组。
在数组中,不存在“存在”或“不存在”的值的概念。例如:
int[] x = new int[5];

exactly的含义是:完全一致,没有任何区别。

int[] x = new int[5];
x[3] = 0;

现在,如果您使用了一个Integer[],您可以使用空值表示“未填充”...这是您想要的吗?
数组始终填充元素类型的默认值-对于引用类型(如Integer),默认值为null

2
我猜测 inv 是一个 int[]。你不能将 nullint 进行比较,null 只适用于引用类型,不适用于基本类型。你必须为其赋予某种标志值(例如,0 是常见的标志值,也是创建数组时默认的值),或者将 inv 改为 Integer[]Integer 是引用类型,可以为 null)。

2
我假设从错误信息中可以看出,inv[]是一个int类型的数组,在Java中int不是对象,因此它不能有null值。你需要将其与空的int数组上每个索引的默认值0进行比较。

除非0是一个有效的值,否则他应该显式地将数组初始化为他知道无效的值。 - Paul
当然,你是对的,但我确实期望从代码中得到这个结果。这段代码很短,几乎没有意义。 - Sorceror

0
你可以尝试这样做:
Integer[] inv = new Integer[10];
inv[0] = 1;
inv[1] = 2;
    ....

if(inv[3] == null)
{
    inv[3] = getSomeValue();
}

0
错误的原因是inv是一个int数组,而不是对象包装器Integer。你的数组已经为你初始化了。如果你写了:
int[] inv = new int[5];

你将拥有一个由5个零组成的数组。

你应该自己初始化数组,使用一些你知道是无效的值(例如,如果你有一个年龄数组,负值就是无效的)。检查是否存在无效值,如果存在,则替换它。


0
Java中的原始类型不能为null。

0

嗯...int是一个原始类型。它不能为null。

你可以检查数组的大小:

int[] arr = new int[10]; System.out.println( arr.length );

普通数组的索引从0到它们的大小-1,并且没有值可以丢失。 因此,在您的代码中,您正在询问第一个类型为int的成员是否为null,这是不可能发生的--它要么是一个数字,要么会导致ArrayOutOfBoundsException

如果你想要一个类似PHP或JavaScript的“稀疏数组”,你需要一个Map

Map<Integer, Integer> map = new HashMap();
map.put( 1, 324 );
if( map.get( 2 ) == null ) ...

这不是自动装箱吗?(也许值得一提。) - Charles Goodwin

-1

原始类型不能与null进行比较。

您可以测试数字是否> 0以查看值是否存在:

if(inv[0] <= 0)
{
    inv[0]=map.getTileId(tileX-1, tileY-1, 0);
}

OP正在网格上放置瓷砖,或者至少看起来是这样。 (0,0) 在网格的左上角,因此所有点都是正数。所以是的,-3在技术上是一个值,但对于这个情况无效。 - Hunter McMillen
so inv 是一个数组,用于包含特定位置的 tileid。我没有看到任何说明 -3 不能作为 tile 的标识符。 - Atreys

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接