如何在Java中处理“int i!=“”或“int i!= null”语句?

8

我们知道int是一种原始数据类型,不能为null。在我的程序中,我想进行条件检查,比如 int i != "",但它说运算符!=不能应用于int、null。

有什么解决办法吗?

编辑:

我已经知道它不能同时拥有这两个属性,我试图表达的是从另一个服务器接收到的参数进行检查的需求,即它是否接收到了某些值或为空。


请参考以下问题:https://dev59.com/mnNA5IYBdhLWcg3wYMt- - Vlad
既然我永远不可能是“”或null,所以没有必要检查它们。你想检查什么? - Grodriguez
@Grodriguez:希望我的编辑回答了你的问题。 - Mohsin Sheikh Khalid
1
@Moshin:那么你现在拥有的不是int类型。很可能它是一个字符串。int类型不能是“空的”。 - Grodriguez
你的问题包含了一个自相矛盾的概念,因此毫无意义。请重新尝试提问。 - user207421
15个回答

8

您可以使用Integer包装类进行此类比较。否则,如果作为类字段的原始int未另行指定,则默认为0。


6

编译器从不说谎。

int 类型无法容纳,因此不需要检查 ""null


谢谢,但我已经知道它不能容纳这两个东西了。我试图提出我的要求,以便检查我从另一个服务器获取的参数是否已收到某些值或为空。 - Mohsin Sheikh Khalid
1
@Mohsin 如果服务器应该返回 int 类型,那么它不能返回这些值,但如果它被写成返回 String 类型,那么将其转换为 int 类型再进行检查就可以了。 - jmj

5
我能想到的只有两种可能性:
  • 根据变量的有效值范围,将其初始化为像“0”或“-1”这样的值,以标记它为空/未使用。

  • 你可以使用java.lang.Integer,仅在实际使用时传递int值进行实例化。但是,如果你的变量经常更改,这将导致大量对象创建,因为Integer对象默认是不可变的。因此,每次值的更改都会导致需要创建一个新的Integer对象。


4
如果你需要/期望整数值的“null状态”,那么你必须使用包装类:
Integer maybeNull = getValueFromDatabase();
if (mybeNull != null) {
  int i = maybeNull;  // outboxing, works with Java 1.5+
} else {
  // column value on database was `NULL`
}

4

您应该检查"i!=0"、"i!=-1"或其他更适合您要求的条件。


这些值可能会出现,所以我无法检查它们以了解是否有任何值在int中。 - Mohsin Sheikh Khalid
检查变量i中永远不会出现的值。一定有某个值。 - Mudassir

3
您想要查看参数是否提交了值,但您将其放在原始类型中。这是不可能的。
我假设您正在使用某种框架与其他服务器进行通信。如果您从框架接收到的值已经是int,则它总是有一个值。框架会为您默认它(值可能为零)。
您需要一个可以给您Integer而不是int的框架。在这种情况下,如果没有给出值,它将给您null。
在您的一侧没有办法检查int是否没有值,因为int不能有“没有值”的情况。

2
创建一个类似于C#的“Nullable”类。
class Nullable<A> {
  private A value = null;

  private Nullable(A value) {
    this.value = value;
  }

  public static <A> Nullable<A> withValue(A value) {
    return new Nullable<A>(value);
  }

  public static <A> Nullable<A> empty() {
    return new Nullable<A>(null);
  }

  public boolean hasValue() {
    return value != null;
  }

  public A getValue() {
    return value;
  }

  public void setValue(A value) {
    this.value = value;
  }      

  // Implement toString, equals, hashCode etc.
}

然后将其用作:

Nullable<Integer> ix = Nullable.<Integer>empty();
if(ix.hasValue()) {
  int i = ix.getValue();
  // do operations with i 
} else {
  // handle the 'null' case
}

2

int数据类型保存整数,因此您无法将其与字符串或null进行比较。这是编译器错误。


2
如果你的值不在整数范围内,那么请使用包装类型Integer - 它有一个额外的值null。这样你就可以这样做:if (i != null) {..} 然而,仅仅为了拥有一个特殊的null值而使用包装类型是很少明智的。你可以使用Integer.MAX_VALUE作为默认值。

2
  • int 可以接受一系列整数值。
  • "" 是一个字符串,不是 int。
  • null 用于引用而不是 int(或其他基本类型)。

真正的问题是,你为什么想进行这样的比较?


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