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
引用(或null),并且Integer
检查将自动将!=
解装箱为Integer
,并起作用int
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)