Java中的并行赋值?

Java有类似于Python的[a, b, c] = (1, 2, 3)或PHP的list($a, $b, $c) = array(1, 2, 3)吗?

并不是的。 您可以执行x = y = 0来设置多个变量,但不能像Python那样进行并行赋值。

Python的多重赋值相当强大,因为它也可以用于并行赋值 ,如下所示:

 (x,y) = (y,x) # Swap x and y 

Java中并行赋值没有等价物; 你必须使用一个临时变量:

 t = x; x = y; y = t; 

您可以在一行中从表达式中分配多个变量,如下所示:

 int a = 1, b = 2, c = 3; 

或者从数组映射,您可以这样做:

 int a = array[0], b = array[1], c = array[2]; 

如果这看起来过于冗长,您可以临时为数组创建一个单字母引用以进行赋值:

 int[] t = array; int a = t[0], b = t[1], c = t[2]; 

在代码在列表或数组中将几个相关变量(可能是不同类型)一起传递的情况下,多重赋值往往在Python中更方便。 在Java(或C / C ++)中,更常用的方法是创建一个小数据类(或结构)来将这些变量捆绑在一起,让生产者和消费者都使用它。 然后,您可以按名称而不是索引来引用字段,如下所示:

 class Foo { public int a; public int b; public int c; } /* ... */ Foo produceFoo() { Foo f = new Foo(); fa = 1; fb = 2; fc = 3; return f; } /* ... */ Foo f = produceFoo(); System.out.println(fa + "," + fb + "," + fc); 

这也为以后的重构打开了大门,这将使Foo成为一个真正的类,具有行为和封装的私有数据,而不仅仅是数据类。

尝试int[] list = {1,2,3} 。 这将创建一个整数数组,其值分别为1,2和3。

并行赋值不难添加到Java中,我们实际上是在我们的OptimJ语言扩展中实现的。 但它不存在。

正如Derrick所提到的,primefaces交换语句需要并行赋值。

你所谓的并行赋值是一个更通用的概念的实例,称为“解构赋值”:你有一些结构,你将它的一部分与变量相匹配。

假设你有嵌入元组,那么破坏赋值可以在任何级别提取数据:

 (x, (y, z)) = ((1, 2, 3), (4, (5, 6))) // x = (1, 2, 3) // y = 4 // z = (5, 6) 

假设您有一个列表或集合,那么解构赋值可以提取子列表或子集(x代表元素,x代表子列表):

 [ x, y*, z ] = [ 1, 2, 3, 4 ] // x = 1 // y = [ 2, 3 ] // z = 4 

显然,列表和集合可以嵌入元组。 这个简单的方案提供了非常强大的编程抽象,只要您需要提取数据就很有用。