在PHP中,有一个isset
函数。 Java怎么样?我想我可以将== null
用于对象,但是像int
答案 0 :(得分:28)
Java的编译器不会让你定义变量并在它们被赋值之前使用它们,所以问题不存在于php中存在的相同形式。
如果在你的情况下编译器没有阻止你(因为这是例如一个实例变量),最好的解决方案可能是将变量初始化为一些“特殊”值,如Guest11239193所建议的那样。像这样:
int x = 0; // because by convention 0 is a reasonable default here
当然,“安全,合理”的初始化值取决于应用程序。
之后,你可以
if (x == 0) { // only allow setting if x has its initial value
x = somenewvalue;
}
或者您可以通过设置器访问x,该设置器禁止多次更改(对于大多数情况可能是过度杀伤):
private int x;
private boolean x_was_touched = false;
public void setX (int newXvalue) {
if (!x_was_touched) {
x = newXvalue;
x_was_touched = true;
}
}
public int getX() {
return x;
}
您还可以使用Integer
,int的对象兄弟,可以将其初始化为null
Integer x = null;
然而,你认为你需要这些知识的事实可能会隐藏你的程序中更深层次的逻辑缺陷,所以我建议你探究你为什么想知道一个原始值(原语而不是对象,{{ {1}} vs int
)未被触及。
答案 1 :(得分:11)
Java中不存在不存在的变量。
答案 2 :(得分:5)
在Java中,使用变量而不进行设置是一个编译器错误。
使用被视为默认“null”值的类和实例变量进行初始化,具体取决于数据类型。
所以类似isset
的函数没有意义。
答案 3 :(得分:3)
您无法检查变量是否已设置。你可以:
0
,如果计算最小值则为最大整数值等。-1
,如果您要使用无符号整数值和字符串的空字符串。答案 4 :(得分:1)
int
的默认值为0
,string
的默认值为""
。
答案 5 :(得分:0)
您可以尝试使用Object而不是原始值,即
Integer x = null;
...
public Integer getX(){
if(x == null) {
x = new Integer(10);
}
return x;
}
答案 6 :(得分:0)
为该控件创建函数,因为每个对象都有自己的关于“isset()result”;
的规则示例:
public static final boolean isEmpty(String x) {
return (x == null || x.trim().equals(""));
}
public static final boolean isEmpty(Integer x) {
return (x == null || x == 0);
}
public static final boolean isEmpty(Long x) {
return (x == null || x == 0);
}
public static final boolean isEmpty(Collection<?> x) {
return (x == null || x.size() == 0);
}
public static final boolean isEmpty(Map<?,?> x) {
return (x == null || x.size() == 0);
}
public static final boolean isEmpty(Object[] x) {
return (x == null || x.length == 0);
}
答案 7 :(得分:0)
想要具有未定义值的最常见用例是从数据源检索信息时。在任何给定的SQL查询中,您可能都有记录,这些记录的整数值为0,但也可以是空/空字段。字符串也是如此,其中空字符串''与未定义或空字符串不同。
看来,使用本机类型的对象引用版本是这里的唯一解决方案,这很不幸,因为它很杂乱。另一种方法是为每个必须手工检查和维护的数据字段存储一个布尔值,这甚至更糟。
答案 8 :(得分:0)
在Java中声明的整数变量不能满足"undefined"
或"null"
的条件。但是,通过使用wrapper class
,我们可以使用它,即:{{1} }
Integer a = null;