在Java中将多个变量初始化为相同的值

use*_*643 197 java variables initialization declaration

我正在寻找一种干净有效的方法来声明相同类型和相同值的多个变量.现在我有:

String one = "", two = "", three = "" etc...
Run Code Online (Sandbox Code Playgroud)

但我正在寻找类似的东西:

String one,two,three = ""
Run Code Online (Sandbox Code Playgroud)

这是在Java中可以做的事情吗?牢记效率.

Alf*_*rio 299

String one, two, three;
one = two = three = "";
Run Code Online (Sandbox Code Playgroud)

这应该适用于不可变对象.它对可变对象没有任何意义,例如:

Person firstPerson, secondPerson, thirdPerson;
firstPerson = secondPerson = thirdPerson = new Person();
Run Code Online (Sandbox Code Playgroud)

所有变量都指向同一个实例.在这种情况下你可能需要的是:

Person firstPerson = new Person();
Person secondPerson = new Person();
Person thirdPerson = new Person();
Run Code Online (Sandbox Code Playgroud)

或者更好的是使用数组或Collection.

  • 在某些情况下,这也适用于可变对象.例如,在linkedlist实现的构造函数中,最初:head = tail = new Node(value).所以头部和尾部都应指向相同的参考. (11认同)

Mic*_*rdt 53

您可以声明多个变量,并初始化多个变量,但不能同时:

 String one,two,three;
 one = two = three = "";
Run Code Online (Sandbox Code Playgroud)

但是,大多数Java开发人员都不赞成这种事情(特别是多项任务),他们认为它 "视觉上简单" 相反.

  • +1指出他正在尝试做的事情*不是常态. (22认同)

sgo*_*les 18

不,这在Java中是不可能的.

你可以这样做..但试着避免它.

String one, two, three;
one = two = three = "";
Run Code Online (Sandbox Code Playgroud)

  • 你能解释为什么要避免这种情况吗? (5认同)
  • @YuhangLin我只是希望有一个更好的答案 (2认同)
  • @AlexanderHeim 感谢您的解释。但我问的原因是因为它应该是答案的一部分。 (2认同)
  • @AlexanderHeim 为什么速度慢? (2认同)

Sru*_*lla 15

适用于原语和不可变类,如StringWrapper classes Character,Byte.

int i=0,j=2   
String s1,s2  
s1 = s2 = "java rocks"
Run Code Online (Sandbox Code Playgroud)

对于可变类

Reference r1 = Reference r2 = Reference r3 = new Object();`  
Run Code Online (Sandbox Code Playgroud)

创建三个引用+一个对象.所有引用都指向同一个对象,您的程序会出错.

  • 我不同意“所有指向同一对象的引用,您的程序都会出现异常。” 唯一的问题是,一个引用的对象发生的事情也发生在另一个引用的对象上-因为它是同一对象。这不是行为不当;这就是Java的工作方式。 (2认同)

Hyp*_*ino 11

你可以这样做:

String one, two, three = two = one = "";
Run Code Online (Sandbox Code Playgroud)

但这些都指向同一个实例.它不会导致最终变量或基本类型出现问题.这样,您就可以在一行中完成所有工作.