是否未设置Java-Object?
考虑以下代码,尝试将是否未设置Java-Object?,java,Java,考虑以下代码,尝试将产品对象添加到产品列表,该列表是产品[]类型的数组 public void addItem(Product product) { for (Product p : productList) { if (p != null){ p = product; } } System.out.println(productList[0]); // This yields null. } 与注释一样,
产品
对象添加到产品列表
,该列表是产品[]
类型的数组
public void addItem(Product product) {
for (Product p : productList) {
if (p != null){
p = product;
}
}
System.out.println(productList[0]); // This yields null.
}
与注释一样,打印结果为null
。为什么没有设置产品
更新:我已经在
!=null
子句,并且对象和子句的其余部分都正常运行。不能使用for-each循环(也称为“增强型”for循环)来设置数组变量,因为它在循环内部使用临时变量。您可以使用它来更改数组已持有的对象的状态,因为temp变量将引用同一对象,但不会设置引用本身。解决方案:使用循环的标准
根据Java语言规范:
增强的for语句相当于的basic for语句
表格:
for (I #i = Expression.iterator(); #i.hasNext(); ) {
VariableModifiersopt TargetType Identifier =
(TargetType) #i.next();
Statement
}
因此,在您的情况下,不严格地说:
for (int n; n < productList.length; ++n) {
Product p = productList[n];
if (p != null) {
p = product;
}
}
for(int n;n
从中,您可以看到为什么从未设置
productList[0]
p
是在循环迭代期间设置的,但从不productList[0]
您不能使用for each循环(也称为“增强型”for循环)来设置数组变量,因为它在循环内使用临时变量。您可以使用它来更改数组已持有的对象的状态,因为temp变量将引用同一对象,但不会设置引用本身。解决方案:使用循环的标准
根据Java语言规范:
增强的for语句相当于的basic for语句
表格:
for (I #i = Expression.iterator(); #i.hasNext(); ) {
VariableModifiersopt TargetType Identifier =
(TargetType) #i.next();
Statement
}
因此,在您的情况下,不严格地说:
for (int n; n < productList.length; ++n) {
Product p = productList[n];
if (p != null) {
p = product;
}
}
for(int n;n
从中,您可以看到为什么从未设置
productList[0]
p
在循环迭代期间被设置,但决不会productList[0]
在每个循环中,变量p
是一个临时变量,将productList
的内容分配给该临时变量。因此,您总是只分配临时变量,而不是分配给列表中的项目
你可能想要这个:
for (int i = 0; i < productList.length; i++)
{
if (productList[i] == null)
{
productList[i] = product;
break;
}
}
for(int i=0;i
如果没有
中断
,您可以将产品
分配给每个为空的项(实际上最好使用布尔值
来处理循环中断,但这也行得通)在for each循环中,变量p
是一个临时变量,productList
的内容将分配给该变量。因此,您总是只分配临时变量,而不是分配给列表中的项目
你可能想要这个:
for (int i = 0; i < productList.length; i++)
{
if (productList[i] == null)
{
productList[i] = product;
break;
}
}
for(int i=0;i
如果没有中断
,您将产品
分配给每个为空的项(实际上最好使用布尔值
来处理循环中断,但这也行得通)此外,我假设addItem()
将要将产品
粘贴到产品列表
中的第一个空插槽中。所以它应该是p==null
。是的,我为拼写错误道歉。代码只是简单地拼凑在一起,以呈现问题,而不是实际的代码,只是试图使其更具可读性。谢谢另外,我假设addItem()
会将product
粘贴到productList
中的第一个空插槽中。所以它应该是p==null
。是的,我为拼写错误道歉。代码只是简单地拼凑在一起,以呈现问题,而不是实际的代码,只是试图使其更具可读性。谢谢