2011-05-06 4 views

답변

7

아니요. x = y = 0을 사용하여 여러 변수를 설정할 수 있지만 Python과 같은 병렬 할당은 할 수 없습니다.

+0

이것은'x = 0; y = 0; JIT 편집 중에 말입니다. –

+0

예, 생성 된 코드는 완전히 동일합니다. –

+4

오른쪽 하단 평가에 따라 다음과 같아야합니다.'y = 0; x = y = new Object();'실제로 두 개의 객체를 생성 할 것인가? – loungerdork

2

시도 int[] list = {1,2,3}. 이것은 각각 1, 2 및 3 값을 갖는 정수 배열을 생성합니다.

+1

당신은'{... '앞에'new int []'가 필요합니다. – corsiKa

+3

배열 초기화 프로그램 앞에 실제로'new int []'가 필요하지 않습니다. 적어도 배열 초기화 프로그램이 과제의 오른쪽 편. –

6

파이썬의 다중 할당이처럼, 그것은 또한 병렬 할당에 사용될 수 있다는 점에서 상당히 강력하다 :

자바 병렬 과제에 대한 해당이 없습니다
(x,y) = (y,x) # Swap x and y 

;

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

또는 배열에서 매핑, 당신은이 작업을 수행 할 수 있습니다 : 당신은이 같은 한 줄의 표현에서 여러 변수를 지정할 수 있습니다

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

: 당신은 임시 변수를 사용해야 할 것입니다 :

이 너무 자세한 것 같으면

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(); 
    f.a = 1; 
    f.b = 2; 
    f.c = 3; 
    return f; 
} 

/* ... */ 

Foo f = produceFoo(); 
System.out.println(f.a + "," + f.b + "," + f.c); 

를 이것은 또한 개인 데이터를 푸 행동과 실제 수업을하고 캡슐화 된 것이다 문에 나중에 리팩토링을 열고, 단지 데이터 수업.

1

병렬 할당은 Java에 추가하기 어려울 수는 없지만 실제로 OptimJ 언어 확장으로 구현했습니다. 그러나 그것은 단지 존재하지 않습니다.

데릭 (Derrick)이 언급했듯이, 원자 적 스왑 명세서에는 병렬 할당이 필요합니다.

병렬 할당이라고하는 것은 더 일반적인 개념 인 "destructuring assignment"의 인스턴스입니다. 구조가 있으며 구조의 일부를 변수와 일치시킵니다.

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

것은 당신이 다음 destructuring 할당이 하위 목록 또는 하위 집합을 (x는 요소를 의미 추출 할 수있는 목록 또는 세트가 가정 :

는 다음 파멸의 임무는 모든 수준에서 데이터를 추출 할 수 있습니다, 튜플을 내장 한 가정 , X *)는 하위 목록을 의미합니다 :

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

목록 및 세트는 튜플로 포함 할 수있다. 이 간단한 체계는 매우 강력한 프로그래밍 추상화를 제공하며 데이터를 추출해야하는 즉시 유용합니다.