Java에서 여러 변수를 동일한 값으로 초기화


214

동일한 유형과 동일한 값의 여러 변수를 선언하는 깨끗하고 효율적인 방법을 찾고 있습니다. 지금 나는 가지고 있습니다 :

String one = "", two = "", three = "" etc...

그러나 나는 다음과 같은 것을 찾고있다 :

String one,two,three = ""

이것이 자바에서 가능한 일입니까? 효율성을 염두에 두십시오.


5
효율성을 염두에 두어야 할 것은 무엇입니까?
khachik

15
코드 길이, 입력 시간, 시각적으로 간단합니다. 그게 내 뜻이야 나는 기억을 예약하는 것이 기억을 보존하고 있으며이 질문은 '인간의'측면과 관련이 있다는 것을 안다.
user83643

1
나는 이것이 일반적으로 받아 들여지는 Java 규칙에 위배된다고 말하고 독자들에게 놀라게 할 것이며 IMHO는 별도의 줄에 선언하는 것보다 읽기가 어렵습니다.
Simeon

4
(Java 8에서) 성능을 확인했습니다 .a = b = c = d = e = true는 a = true보다 2x + 번 걸립니다. b = 참; 등등.
Amit Kumar Gupta

답변:


319
String one, two, three;
one = two = three = "";

이것은 불변의 객체에서 작동합니다. 예를 들어 다음과 같이 변경 가능한 객체에는 의미가 없습니다.

Person firstPerson, secondPerson, thirdPerson;
firstPerson = secondPerson = thirdPerson = new Person();

모든 변수는 동일한 인스턴스를 가리 킵니다. 아마도이 경우에 필요한 것은 다음과 같습니다.

Person firstPerson = new Person();
Person secondPerson = new Person();
Person thirdPerson = new Person();

또는 배열이나을 사용하는 것이 좋습니다 Collection.


11
변경 가능한 객체에도 적용되는 경우가 있습니다. 예를 들어, linklist 구현의 생성자에서 처음에는 head = tail = new Node (value)입니다. 따라서 머리와 꼬리는 동일한 참조를 가리켜 야합니다.
bcorso

이것들이 같은 대상입니까? 나중에 나중에 true one = "cat"two.equals("cat")반환합니까?
Aequitas 5

유일한주의 사항은 정적 변수에서는 작동하지 않는다는 것입니다.
IgorGanapolsky

정수 선언은 어떻습니까?
IgorGanapolsky

캘린더에서 왜 작동하지 않습니까? 그렇게하면 변수 중 하나를 조작 할 때 모든 변수가 동일하게 작동합니다
TheCrazyProfessor

59

여러 변수를 선언하고 여러 변수를 초기화 할 수 있지만 동시에 두 변수를 모두 초기화 할 수는 없습니다.

 String one,two,three;
 one = two = three = "";

그러나 이런 종류의 것 (특히 다중 할당)은 대부분의 자바 개발자 들이 "시각적으로 단순한" 의 반대 라고 생각하기 때문에 어리둥절 할 것 입니다.


24
그가하려는 것이 표준 이 아니라고 지적한 것에 대해 +1 .
Brian Roach 2016 년

이것은 String 용이지만 정수 방법은 무엇입니까 ?? int day, month, year, hour, min = 일 = 월 = 년 = 시간 = 0; 맞아 ??
Ranjit

23

아니요, Java에서는 불가능합니다.

이 방법으로 할 수 있습니다 .. 그러나 하십시오.

String one, two, three;
one = two = three = "";

8
이것을 피해야하는 이유를 설명 할 수 있습니까?
Neuron

@Lonely Neuron 이런 식으로 사용하면 실수하기 쉽다고 생각합니다.
Yuhang Lin

3
@YuhangLin 난 그냥 더 나은 답변을 기대하고 있었다
Neuron

@LonelyNeuron 하나 더 느리다. 별도로 초기화하는 것처럼 거의 두 배의 시간이 걸립니다. 다른 하나는이 "기능"이 필요하지 않습니다. 다른 접근법을 사용하여 해결할 수없는 시나리오를 생각할 수 없습니다. 그것은 단순히 깨끗한 코드가 아니라고 말했습니다.
Alexander Heim 2019

@AlexanderHeim 설명해 주셔서 감사합니다. 그러나 내가 요청한 이유는 답변의 일부 여야하기 때문입니다.
Neuron

18

String래퍼 클래스 문자, 바이트 와 같은 프리미티브 및 변경 불가능한 클래스에서 작동합니다 .

int i=0,j=2   
String s1,s2  
s1 = s2 = "java rocks"

변경 가능한 클래스

Reference r1 = Reference r2 = Reference r3 = new Object();`  

세 개의 참조 + 하나의 개체가 생성됩니다. 모든 참조는 동일한 객체를 가리키며 프로그램이 잘못 작동합니다.


2
"동일한 개체를 가리키는 모든 참조 및 프로그램이 제대로 작동하지 않습니다"에 동의하지 않습니다. 유일한 문제는 한 참조의 객체에서 발생하는 일이 다른 참조의 객체에서 발생한다는 것입니다. 동일한 객체이기 때문입니다. 이것은 잘못된 행동이 아닙니다. Java가 작동하는 방식입니다.
GKFX

"misbehave"는 무엇을 의미합니까? 3 개의 개별적으로 초기화 된 객체와 다르게 동작하지만 실제로는 원하는 것에 달려 있습니다.
Neuron

12

당신은 이것을 할 수 있습니다 :

String one, two, three = two = one = "";

그러나 이것들은 모두 같은 인스턴스를 가리킬 것입니다. 최종 변수 또는 기본 유형에 문제가 발생하지 않습니다. 이런 식으로 모든 것을 한 줄로 할 수 있습니다.


2

나는 그것이 당신이 제공 한 첫 번째 예와 같이 모든 값을 개별적으로 설정해야한다고 생각하지 않습니다.

두 번째 예는 마지막으로 평가할 수있는 항목 만 ""(으)로 초기화하고 나머지는 초기화하지 않습니다.


0

너무 늦었지만 내가 찾은 가장 간단한 방법은 다음과 같습니다.

String foo = bar = baz = "hello"
println(foo)
println(bar)
println(baz)

산출:

hello
hello
hello
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.