Java中的并行赋值?

pow*_*boy 18 java

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

Cha*_*tin 8

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

  • 基于左右评估,它应该是:`y = 0; x = y;`否则,`x = y = new Object();`实际上会创建两个对象? (5认同)
  • 奇怪的是,我在问题或答案中的任何地方都找不到“new Object()”。 (2认同)

D C*_*zee 8

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

(x,y) = (y,x) # Swap x and y
Run Code Online (Sandbox Code Playgroud)

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

t = x; x = y; y = t;
Run Code Online (Sandbox Code Playgroud)

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

int a = 1, b = 2, c = 3;
Run Code Online (Sandbox Code Playgroud)

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

int a = array[0], b = array[1], c = array[2];
Run Code Online (Sandbox Code Playgroud)

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

int[] t = array;
int a = t[0], b = t[1], c = t[2];
Run Code Online (Sandbox Code Playgroud)

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

class Foo {
    public int a;
    public int b;
    public int c;
}

/* ... */

Foo produceFoo() {
    Foo f = new Foo();
    f.a = 1;
    f.b = 2;
    f.c = 3;
    return f;
}

/* ... */

Foo f = produceFoo();
System.out.println(f.a + "," + f.b + "," + f.c);
Run Code Online (Sandbox Code Playgroud)

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