Khởi tạo nhiều biến thành cùng một giá trị trong Java


214

Tôi đang tìm kiếm một phương pháp sạch và hiệu quả để khai báo nhiều biến cùng loại và có cùng giá trị. Ngay bây giờ tôi có:

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

Nhưng tôi đang tìm kiếm một cái gì đó như:

String one,two,three = ""

Đây có phải là một cái gì đó có thể làm trong java? Giữ hiệu quả trong tâm trí.


5
Giữ hiệu quả trong tâm trí hiệu quả của những gì?
khachik

15
Độ dài của mã, thời gian để gõ, trực quan đơn giản. Ý tôi là thế. Tôi biết rằng việc lưu trữ bộ nhớ là bảo lưu bộ nhớ và câu hỏi này có liên quan đến khía cạnh 'con người'.
dùng83643

1
Tôi nói rằng điều này thường chống lại các quy ước Java được chấp nhận, nó sẽ gây ngạc nhiên cho người đọc và IMHO khó đọc hơn là khai báo chúng trên các dòng riêng biệt.
Simeon

4
Tôi đã kiểm tra hiệu năng (trên java 8) a = b = c = d = e = true mất gấp 2 lần so với a = true; b = đúng; và như thế.
Amit Kumar Gupta

Câu trả lời:


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

Điều này sẽ làm việc với các đối tượng bất biến. Nó không có ý nghĩa gì đối với các đối tượng có thể thay đổi, ví dụ:

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

Tất cả các biến sẽ được trỏ đến cùng một ví dụ. Có lẽ những gì bạn sẽ cần trong trường hợp đó là:

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

Hoặc tốt hơn là sử dụng một mảng hoặc a Collection.


11
Có những trường hợp điều này có ý nghĩa đối với các đối tượng có thể thay đổi là tốt. Chẳng hạn, trong hàm tạo của việc thực hiện danh sách liên kết trong đó ban đầu: head = tail = new Node (value). Vì vậy, cả đầu và đuôi nên trỏ đến cùng một tham chiếu.
bcorso

Đây có phải là cùng một đối tượng? Nếu sau này tôi one = "cat"two.equals("cat")trả lại đúng không?
Aequitas

Nhắc nhở duy nhất là điều này sẽ không hoạt động cho các biến tĩnh.
IgorGanapolsky

Thế còn khai báo số nguyên?
IgorGanapolsky

Tại sao điều này không hoạt động với Lịch? nếu bạn làm điều đó thì mọi biến số đều hoạt động giống như khi bạn thao túng một trong số chúng
TheCrazyProfigator

59

Bạn có thể khai báo nhiều biến và khởi tạo nhiều biến, nhưng không phải cả hai biến cùng một lúc:

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

Tuy nhiên, loại điều này (đặc biệt là nhiều bài tập) sẽ được hầu hết các nhà phát triển Java cau mày, những người sẽ coi nó trái ngược với "đơn giản trực quan".


24
+1 để chỉ ra rằng những gì anh ta cố gắng làm không phải là tiêu chuẩn.
Brian Roach

đây là cho String, nhưng làm thế nào cho số nguyên ?? int ngày, tháng, năm, giờ, phút = ngày = tháng = năm = giờ = 0; đúng không ??
Ranjit

23

Không, nó không thể có trong java.

Bạn có thể làm theo cách này .. Nhưng hãy cố gắng tránh nó.

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

8
Bạn có thể giải thích tại sao điều này nên tránh?
Neuron

@Lonely Neuron Tôi nghĩ thật dễ mắc lỗi nếu bạn sử dụng nó theo cách này.
Yuhang Lin

3
@YuhangLin tôi chỉ mong có câu trả lời tốt hơn
Neuron

@LonelyNeuron Vâng, đối với một người thì nó chậm hơn. Phải mất gần gấp đôi thời gian như thể bạn sẽ khởi tạo một cách riêng biệt. Một cái khác là "tính năng" này là không cần thiết. Tôi có thể nghĩ ra một kịch bản có thể giải quyết được bằng cách sử dụng một cách tiếp cận khác. Nó nói đơn giản là không phải là một mã sạch.
Alexander Heim

@AlexanderHeim Cảm ơn bạn đã giải thích. Nhưng lý do tôi hỏi là vì nó nên là một phần của câu trả lời.
Neuron

18

Hoạt động cho các lớp nguyên thủy và bất biến như String, lớp Wrapper Nhân vật, Byte.

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

Đối với các lớp có thể thay đổi

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

Ba tham chiếu + một đối tượng được tạo. Tất cả các tham chiếu trỏ đến cùng một đối tượng và chương trình của bạn sẽ hoạt động sai.


2
Tôi không đồng ý với "Tất cả các tham chiếu trỏ đến cùng một đối tượng và chương trình của bạn sẽ hoạt động sai." Vấn đề duy nhất là những gì xảy ra với đối tượng của một tham chiếu xảy ra với đối tượng của một tham chiếu khác - bởi vì đó là cùng một đối tượng. Đây không phải là hành vi sai trái; đó là cách Java hoạt động.
GKFX

bạn có ý nghĩa gì với "misbehave"? Nó sẽ hành xử khác nhau sau đó 3 đối tượng khởi tạo riêng biệt, nhưng nó thực sự phụ thuộc vào những gì bạn muốn ..
Neuron

12

Bạn có thể làm được việc này:

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

Nhưng tất cả sẽ chỉ đến cùng một ví dụ. Nó sẽ không gây ra vấn đề với các biến cuối cùng hoặc các kiểu nguyên thủy. Bằng cách này, bạn có thể làm mọi thứ trong một dòng.


2

Tôi không nghĩ rằng có thể bạn phải đặt tất cả các giá trị riêng biệt (như ví dụ đầu tiên bạn cung cấp.)

Ví dụ thứ hai bạn đã đưa ra, sẽ chỉ Khởi tạo biến đổi cuối cùng thành "" chứ không phải các biến khác.


0

Cách quá muộn để làm điều này nhưng cách đơn giản nhất tôi đã tìm thấy là:

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

Đầu ra:

hello
hello
hello
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.