2011-06-01 26 views
153

Estoy buscando un método limpio y eficiente para declarar múltiples variables del mismo tipo y del mismo valor. Ahora mismo tengo:Inicializando múltiples variables con el mismo valor en Java

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

Pero estoy buscando algo como:

String one,two,three = "" 

esto es algo que se puede hacer en Java? Teniendo en cuenta la eficiencia.

EDIT: Varios miembros han señalado que esta no es la norma y que confundiría a la mayoría de las personas. Gracias por señalar esto. Creo que me voy a mantener alejado de esta implementación, pero agradezco las respuestas a continuación.

+3

_Mantenga la eficiencia en mente_eficacia de qué? – khachik

+9

Longitud del código, hora de 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 de Java aceptadas, sorprenderá al lector y en mi humilde opinión es más difícil de leer que declararlas en líneas separadas. – Simeon

Respuesta

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

Esto debería funcionar con objetos inmutables. No tiene ningún sentido para los 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ía en ese caso es:

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

O mejor aún use una matriz o colección.

+6

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

+0

¿Son estos el mismo objeto? Si luego hago 'one =" cat "' will 'two.equals (" cat ")' ¿devuelve true? – Aequitas

+0

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

2

No creo que es posible que usted tiene que fijar todos los valores individualling (como el primer ejemplo que nos ha facilitado.)

El segundo ejemplo que diste, sólo se inicializará el último varuable a "" y no el otros.

15

No, no es posible en java.

Puedes hacerlo de esta manera ... Pero intenta evitar.

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

Se puede declarar múltiples variables, y asignar múltiples variables, pero no ambas al mismo tiempo:

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

Sin embargo, este tipo de cosas (especialmente la asignación múltiple) sería mal visto por la mayoría de los desarrolladores de Java , quien lo consideraría el opuesto a de "visualmente simple".

+15

+1 para señalar que lo que está tratando de hacer * no es * la norma. –

+0

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

+0

@RanjitPati: funciona exactamente como con Strings. –

11

Funciona para primitivos y clases inmutables como String, Wrapper classes Character, Byte. Se crean

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

Para las clases mutables

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

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

+0

No estoy de acuerdo con "Todas las referencias apuntan al mismo objeto y su programa se portará mal". El único problema es que lo que sucede con el 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

6

Usted puede hacer esto:

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

pero éstos apuntan a la misma instancia. No causará problemas con las variables finales o los tipos primitivos. De esta manera, puedes hacer todo en una línea.

Cuestiones relacionadas