Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正在数据列表中传递对象。_Java - Fatal编程技术网

Java 正在数据列表中传递对象。

Java 正在数据列表中传递对象。,java,Java,行“if(l.head.item!=9”给了我一个错误,它说object与int不兼容。我真的不明白为什么会这样?如何修复它 /DListNode1/ 因为DListNode1.item是一个对象而不是整数。请尝试强制转换为Integer并与整数(9)进行比较,它会给您错误,因为int是基元: Incompatible operand types Object and int 将代码更改为: if (!l.head.item.equals(new Integer(9))) { 希望这有帮助。

行“
if(l.head.item!=9
”给了我一个错误,它说object与int不兼容。我真的不明白为什么会这样?如何修复它

/DListNode1/


因为
DListNode1.item
是一个对象而不是整数。请尝试强制转换为
Integer
并与
整数(9)
进行比较,它会给您错误,因为int是基元:

Incompatible operand types Object and int
将代码更改为:

if (!l.head.item.equals(new Integer(9))) {

希望这有帮助。

正如其他人所指出的,问题是
l.head.item
的类型是
对象
,您无法使用
!=
=
将其与
int
进行比较

选项:

  • l.head.item
    转换为
    Integer
    int

    // This could be done in one step if you wanted
    int headValue = (int) l.head.item;
    if (headValue != 9)
    

    或者,您也可以在线执行此操作:

    if ((int) l.head.item != 9)
    
  • 改为使用
    equals
    ,它会自动将
    int
    框成
    整数

    if (!head.equals(9))
    
  • 将您的类型改为泛型,这样您将有一个
    DListNode1
    ,然后您可以确定所有节点值都是
    Integer
    引用(或null),并且
    !=
    检查将自动将
    Integer
    解装箱为
    int
    ,并起作用

就我个人而言,我肯定会将此定义为泛型,但我的猜测是,您对Java比较陌生,可能还不想从泛型开始

请注意,使用
equals
和执行取消装箱之间有区别:如果
l.head.item
的值是对非
Integer
对象的引用,第一种方法将抛出
ClassCastException
,第二种方法将直接进入
if
语句的主体(例如,字符串不等于9)。以下哪一项更可取取决于您试图在更大的程序中实现的目标:如果您的列表包含非整数是完全合理的,您应该使用
equals
检查;如果它实际指示编程错误,则更可取异常,因为它会更快地提醒您错误并停止您的程序防止ram继续进行无效的假设

在这两种情况下,如果
l.head.item
null
,您将得到
NullPointerException
。这可以通过以下方法“修复”:


…但这同样取决于如果值为空,您希望代码执行的操作。

使用equals方法进行比较。'=='将比较引用

if(l.head.item.equals(new Integer(9))==false)

请参阅我对Kugathasan Abimaran回答的评论。强制转换可能会产生ClassCaseException。@KugathasanAbimaran:确实如此。我们将对此进行补充。@KugathasanAbimaran:这取决于您所说的“正确”的意思。您假设继续操作比异常更好。在大多数情况下,程序知道集合中的类型,以及是否正确“knowledge”被证明是错误的,异常是一个更好的选择,而不是不顾后果地继续。此外,如果值为非整数,则代码不会进入
if
块-即使它不等于整数9。也许这是OP想要的,也许不是……感谢您与我们一起花费的时间,以及您的工作量。
if (!head.equals(9))
if (!Integer.valueOf(9).equals(l.head.item))
if(l.head.item.equals(new Integer(9))==false)