Inicializando várias variáveis ​​com o mesmo valor em Java


214

Estou procurando um método limpo e eficiente de declarar várias variáveis ​​do mesmo tipo e do mesmo valor. Agora eu tenho:

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

Mas estou procurando algo como:

String one,two,three = ""

Isso é algo que é possível fazer em java? Mantendo a eficiência em mente.


5
Mantenha a eficiência em mente a eficiência de quê?
khachik

15
Comprimento do código, hora de digitar, visualmente simples. É o que eu quero dizer. Eu sei que reservar memória está reservando memória e que esta questão está relacionada ao lado "humano" das coisas.
user83643

1
Eu diria que isso geralmente é contra as convenções Java aceitas, surpreenderá o leitor e o IMHO é mais difícil de ler do que declará-las em linhas separadas.
Simeon

4
Eu verifiquei o desempenho (em java 8) a = b = c = d = e = true leva 2x + vezes que a = true; b = verdadeiro; e assim por diante.
Amit Kumar Gupta

Respostas:


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

Isso deve funcionar com objetos imutáveis. Não faz sentido para objetos mutáveis, por exemplo:

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

Todas as variáveis ​​apontariam para a mesma instância. Provavelmente o que você precisaria nesse caso é:

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

Ou melhor ainda, use uma matriz ou a Collection.


11
Há casos em que isso também faz sentido para objetos mutáveis. Por exemplo, no construtor da implementação de lista vinculada, onde inicialmente: head = tail = new Node (value). Portanto, cabeça e cauda devem apontar para a mesma referência.
bcorso

Estes são o mesmo objeto? Se eu mais tarde fazer one = "cat"vai two.equals("cat")retornar true?
Aequitas

A única ressalva é que isso não funcionaria para variáveis ​​estáticas.
IgorGanapolsky

E as declarações de número inteiro?
IgorGanapolsky

Por que isso não funciona com o Google Agenda? se você fizer isso cada comportam variável como é o mesmo quando você manipula um deles
TheCrazyProfessor

59

Você pode declarar várias variáveis ​​e inicializar várias variáveis, mas não as duas ao mesmo tempo:

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

No entanto, esse tipo de coisa (especialmente as várias atribuições) seria desaprovado pela maioria dos desenvolvedores de Java, que considerariam o oposto de "visualmente simples".


24
+1 por apontar que o que ele está tentando fazer não é a norma.
Brian Roach

isso é para String, mas como para inteiros ?? int dia, mês, ano, hora, min = dia = mês = ano = hora = 0; está certo ??
Ranjit

23

Não, não é possível em java.

Você pode fazer desta maneira .. Mas tente evitá- lo.

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

8
Você pode explicar por que isso deve ser evitado?
28518 Neuron

@Lonely Neuron Acho que é fácil cometer um erro se você usá-lo dessa maneira.
Yuhang Lin

3
@YuhangLin eu só estava esperando por uma resposta melhor
Neuron

@LonelyNeuron Bem, para um, é mais lento. Leva quase o dobro do tempo, como se você fosse inicializar separadamente. Um pelo outro, esse "recurso" é desnecessário. Não consigo pensar em um cenário que não seria solucionável usando uma abordagem diferente. É simplesmente dito que não é um código limpo.
Alexander Heim

@AlexanderHeim Obrigado pela explicação. Mas o motivo pelo qual perguntei foi porque deveria fazer parte da resposta.
21419 Neuron

18

Trabalha para classes primitivas e imutáveis ​​como String, classes Wrapper Character, Byte.

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

Para classes mutáveis

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

Três referências + um objeto são criadas. Todas as referências apontam para o mesmo objeto e seu programa se comportará mal.


2
Não concordo com "Todas as referências apontando para o mesmo objeto e seu programa se comportará mal". O único problema é que o que acontece com o objeto de uma referência acontece com o objeto de outra referência - porque é o mesmo objeto. Isso não é mau comportamento; é como o Java funciona.
GKFX

o que você quer dizer com "comportar-se mal"? Ele irá se comportar de forma diferente, em seguida, 3 objetos inicializados separadamente, mas realmente depende do que você quer ..
Neuron

12

Você consegue fazer isso:

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

Mas tudo isso apontará para a mesma instância. Não causará problemas com variáveis ​​finais ou tipos primitivos. Dessa forma, você pode fazer tudo em uma linha.


2

Não acho que seja possível que você tenha que definir todos os valores individualmente (como no primeiro exemplo que você forneceu).

O segundo exemplo que você deu apenas inicializará a última variável para "" e não as outras.


0

Tarde demais para isso, mas a maneira mais simples que encontrei é:

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

Resultado:

hello
hello
hello
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.