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

在Java中将多个变量初始化为相同的值,java,variables,initialization,declaration,Java,Variables,Initialization,Declaration,我正在寻找一种干净高效的方法来声明相同类型和相同值的多个变量。现在我有: String one = "", two = "", three = "" etc... 但我在寻找类似的东西: String one,two,three = "" 这在java中是可以做到的吗?将效率牢记在心。我认为这是不可能的,您必须将所有值单独设置(如您提供的第一个示例) 您给出的第二个示例将只将最后一个变量初始化为“”,而不初始化其他变量。不,在java中不可能 你可以这样做。。但是尽量避免它 String o

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

String one = "", two = "", three = "" etc...
但我在寻找类似的东西:

String one,two,three = ""

这在java中是可以做到的吗?将效率牢记在心。

我认为这是不可能的,您必须将所有值单独设置(如您提供的第一个示例)


您给出的第二个示例将只将最后一个变量初始化为“”,而不初始化其他变量。

不,在java中不可能

你可以这样做。。但是尽量避免它

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();

或者最好使用数组或数组。

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

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

但是,大多数java开发者会对这种事情(尤其是多任务)感到不快,他们认为它与“视觉上简单”相反。

为原语和不可变类如“代码>字符串< /COD>”、包装类字符、字节>p>

int i=0,j=2   
String s1,s2  
s1 = s2 = "java rocks"
对于可变类

Reference r1 = Reference r2 = Reference r3 = new Object();`  
将创建三个参照+一个对象。所有引用都指向同一个对象,您的程序将出现错误

您可以这样做:

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

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

编辑:正如Zeeen指出的那样,这在Java中不起作用。我想回答的问题也是在Groovy中,这是错误提交的


做这件事太晚了,但我发现最简单的方法是:

String foo = bar = baz = "hello"
println(foo)
println(bar)
println(baz)
输出:

hello
hello
hello


记住效率是什么?代码的长度,打字的时间,视觉上的简单。这就是我的意思。我知道保留内存就是保留内存,这个问题与事物的“人”方面有关。我想说,这通常是违反公认的Java约定的,这会让读者感到惊讶,而且IMHO比在单独的行中声明它们更难阅读。我检查了性能(在Java 8上)a=b=c=d=e=true比a=true需要2倍以上的时间;b=正确;等等。@AmitKumarGupta我在JDK16上测试了它,使用JMH没有发现明显的区别。你是怎么测试的?此外,一旦分配一、二、三个常数以外的值,它将变为相同值(多重分配)。事实上,在处理多线程代码时可以利用多变量赋值,因为DUP使用堆栈。+1指出他试图做的不是规范。这是针对字符串的,但如何针对整数??整数天,月,年,小时,分钟=天=月=年=小时=0;这是否正确?在某些情况下,这对于可变对象也是有意义的。例如,在linkedlist实现的构造函数中,其中初始值为:head=tail=new Node(value)。所以头部和尾部都应该指向同一个参照物。它们是同一个物体吗?如果我稍后执行
one=“cat”
操作,那么
two.equals(“cat”)
将返回true?唯一需要注意的是,这对静态变量不起作用。整数声明呢?为什么对日历不起作用?如果你这样做的话,当你操作其中一个变量时,每个变量的行为都是一样的,我不同意“所有引用都指向同一个对象,你的程序会出现错误。”唯一的问题是,一个引用的对象发生的事会发生在另一个引用的对象上——因为它是同一个对象。这不是不当行为;这就是Java的工作原理。你说的“行为不端”是什么意思?它的行为将不同于3个单独初始化的对象,但这确实取决于你想要什么。你能解释一下为什么应该避免这种情况吗?@Lonely Neuron我认为如果你这样使用它很容易出错。@YuhangLin我只是希望有更好的结果answer@AlexanderHeim谢谢你的解释。但我问这个问题的原因是因为它应该是答案的一部分。@AlexanderHeim为什么它会慢一些?我认为这不管用。@Zeeen在Groovy解释器中尝试一下!这是groovy,而不是普通的旧Java。而且它在普通java上也不起作用,我只是测试了一下。啊,是的,看看这个,当我提交这个答案时,一定是把一些标签弄混了。至少看起来它帮助了其他困惑的人“\_(ツ)_/¯
hello
hello
hello