Inicializando múltiples variables al mismo valor en Java


214

Estoy buscando un método limpio y eficiente para declarar múltiples variables del mismo tipo y del mismo valor. En este momento tengo:

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

Pero estoy buscando algo como:

String one,two,three = ""

¿Es esto algo que es posible hacer en Java? Teniendo en cuenta la eficiencia.


55
Tenga en cuenta la eficiencia eficiencia de qué?
khachik 01 de

15
Longitud del código, tiempo para escribir, visualmente simple. Eso es lo que quiero decir. Sé que reservar memoria es reservar memoria y que esta pregunta está relacionada con el lado "humano" de las cosas.
user83643

1
Diría que esto generalmente va en contra de las convenciones aceptadas de Java, sorprenderá al lector y en mi humilde opinión es más difícil de leer que declararlas en líneas separadas.
Simeon

44
Verifiqué el rendimiento (en java 8) a = b = c = d = e = verdadero toma 2 veces más que a = verdadero; b = verdadero; y así.
Amit Kumar Gupta

Respuestas:


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

Esto debería funcionar con objetos inmutables. No tiene ningún sentido para objetos mutables, por ejemplo:

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

Todas las variables estarían apuntando a la misma instancia. Probablemente lo que necesitarías en ese caso es:

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

O mejor aún, use una matriz o un Collection.


11
Hay casos en los que esto también tiene sentido para objetos mutables. Por ejemplo, en el constructor de la implementación de la lista vinculada donde inicialmente: head = tail = new Node (value). Entonces, tanto la cabeza como la cola deben apuntar a la misma referencia.
bcorso

¿Son estos el mismo objeto? Si luego lo hago, one = "cat"¿ two.equals("cat")volveré verdadero?
Aequitas

La única advertencia es que esto no funcionaría para variables estáticas.
IgorGanapolsky

¿Qué pasa con las declaraciones de enteros?
IgorGanapolsky

¿Por qué esto no funciona con Calendar? si haces que cada variable se comporte igual cuando manipulas una de ellas
TheCrazyProfessor

59

Puede declarar múltiples variables e inicializar múltiples variables, pero no ambas al mismo tiempo:

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

Sin embargo, este tipo de cosas (especialmente las asignaciones múltiples) sería mal visto por la mayoría de los desarrolladores de Java, que considerarían lo contrario de "visualmente simple".


24
+1 por señalar que lo que está tratando de hacer no es la norma.
Brian Roach

esto es para String, pero ¿cómo para enteros? int día, mes, año, hora, min = día = mes = año = hora = 0; Es correcto ??
Ranjit

23

No, no es posible en Java.

Puedes hacerlo de esta manera ... Pero trata de evitarlo .

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

8
¿Puedes explicar por qué esto debería evitarse?
Neurona

@Loneely Neuron Creo que es fácil cometer un error si lo usa de esta manera.
Yuhang Lin

3
@YuhangLin solo esperaba una mejor respuesta
Neuron

@LonelyNeuron Bueno, para uno es más lento. Tarda casi el doble de tiempo como si simplemente se inicializara por separado. Uno al otro esta "característica" es innecesaria. No puedo pensar en un escenario que no pueda resolverse utilizando un enfoque diferente. Simplemente se dice que no es un código limpio.
Alexander Heim

@AlexanderHeim Gracias por la explicación. Pero la razón por la que pregunté fue porque debería ser parte de la respuesta.
Neurona

18

Funciona para clases primitivas e inmutables como String, clases de envoltura de caracteres, bytes.

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

Para clases mutables.

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

Se crean tres referencias + un objeto. Todas las referencias apuntan al mismo objeto y su programa se comportará mal.


2
No estoy de acuerdo con "Todas las referencias apuntan al mismo objeto y su programa se comportará mal". El único problema es que lo que le sucede al objeto de una referencia le sucede al objeto de otra referencia, porque es el mismo objeto. Esto no es mal comportamiento; así es como funciona Java.
GKFX

¿Qué quieres decir con "portarse mal"? Se comportará de manera diferente que 3 objetos inicializados por separado, pero realmente depende de lo que quieras ...
Neuron

12

Puedes hacerlo:

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

Pero todos apuntarán a la misma instancia. No causará problemas con variables finales o tipos primitivos. De esta manera, puedes hacer todo en una línea.


2

No creo que sea posible que tenga que establecer todos los valores individualmente (como el primer ejemplo que proporcionó).

El Segundo ejemplo que usted dio, solo Inicializará el último variable para "" y no los otros.


0

Demasiado tarde para esto, pero la forma más simple que he encontrado es:

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

Salida:

hello
hello
hello
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.