sách gpt4 ăn đã đi

java - Mục đích của dấu ngoặc kép ("") nối với số nguyên

In lại Tác giả: Walker 123 Thời gian cập nhật: 29-11-2023 09:46:45 28 4
mua khóa gpt4 giày nike

Tôi mới bắt đầu đọc cuốn sách "Head First Java". Có một bài tập làm tôi bối rối do dấu ngoặc kép ("") không có dấu cách trong đoạn mã bên dưới. Tôi nghĩ là tôi hiểu nhưng có vẻ như cuốn sách không giải thích điều đó và tôi muốn chắc chắn rằng mình đúng.

Mục đích của dấu ngoặc kép ("") trong mã bên dưới có phải là để nối hai số nguyên (x và y) và ngăn toán tử + thực hiện phép cộng trên đầu ra không? Đó là những gì nó trông giống như vậy.

Đầu ra của đoạn mã sau là: 00 11 21 32 42.

Tôi đã xóa dấu ngoặc kép và đầu ra là: 0 2 3 5 6.

lớp Kiểm tra
{
public static void main (String[] args)
{
số nguyên x = 0;
int y = 0;

trong khi ( x < 5)
{
y = x - y;
Hệ thống.out.print(x + "" + y + " ");
x = x + 1;
}
}
}

câu trả lời hay nhất

Để trả lời câu hỏi trực tiếp của bạn: bạn đúng, "" sẽ ở đâu + Trở thành một nối, không bổ sung. Nhưng tôi sẽ cung cấp thêm một số chi tiết về những gì đang diễn ra ở đây.

Tác giả của cuốn sách có thể hơi tệ khi sử dụng nó mà không có lời giải thích, vì nó có vẻ là chìa khóa trong bài tập (thậm chí có một chú thích ngắn gọn nói rằng "đó chỉ là một cách đơn giản để chuyển đổi thành chuỗi" nhưng đây là một trong số đó). những điều mà hầu hết các lập trình viên Java thậm chí sẽ không cân nhắc đến việc yêu cầu giải thích và nó dễ bị bỏ qua hoặc có thể họ đã giải thích trước đó và bạn đã bỏ lỡ nó vì tính chất một lần của lời giải thích. Không có lời buộc tội nào cả;


Chúng tôi đang cố gắng đánh giá biểu thức x + ""+ y + "" để in nó. bởi vì + Đúng liên kết trái , được đánh giá là

((x + "") + y) + " "

Vì vậy, nó bao gồm "" Về mặt hiệu quả, vấn đề là biểu thức con x + "" Nó sẽ được đánh giá như thế nào. nếu như "" bị bỏ qua, nó sẽ được đánh giá là

(x + y) + " "

Không có toán tử riêng biệt cho "cộng số" và "nối chuỗi" trong Java: hãy sử dụng cả hai+. Vì vậy, Java sử dụng một quy tắc đơn giảnQuyết định giữa hai:

Nếu kiểu của một trong hai toán hạng của toán tử + là String, thì phép toán là nối chuỗi.

Vì vậy,x + "" là một chuỗi nối, trong khi x + y Đó là sự bổ sung kỹ thuật số.

Nếu bạn xem các chi tiết cụ thể của việc nối chuỗi :

Nếu chỉ có một biểu thức toán hạng có kiểu String, thì chuyển đổi chuỗi (§5.1.11) được thực hiện trên toán hạng còn lại để tạo ra chuỗi khi chạy.

Tức là,int + Chuỗi TRONGsố nguyên Điều hợp lý là nó phải được chuyển đổi thành một chuỗi để có thể nối với một chuỗi khác. Và cái nàychuyển đổi chuỗisử dụng:

Nếu như Tbyte, ngắn, hoặc số nguyên, sau đó sử dụng số nguyên mới(x).

...

sự chuyển đổi được thực hiện như thể bằng một lời kêu gọi của phương pháp của đối tượng được tham chiếu không có đối số

("Như thể" chỉ là một cách ngọ nguậy để biểu thị rằng bạnThực raKhông cần phải gọisố nguyên mới(x) - Thực hiện có thể được sử dụngSố nguyên。 toString(x), hoặc một số phương pháp khác.

Sau đó, nốiđược định nghĩa là :

Các ký tự của toán hạng bên trái đứng trước các ký tự của toán hạng bên phải trong chuỗi mới được tạo.

Trong khi "" không có ký tự,một sốString + "" sẽ có điều tương tự một sốChuỗi Ký tự giống nhau (*).

Vì vậy,số nguyên + ""(hoặc ""+ số nguyên) chỉ cần thay thế số nguyên Chuyển đổi thành Mẹo cú pháp cho > Chuỗi. Làm như vậy không có tác dụng gì khác. nó chỉ tốt hơn Số nguyên.toString(x) hoặc mới Integer(x).toString() Ngắn gọn hơn.

Cũng cần chỉ ra rằng nếu nó ""+ x + y + "", nó hoạt động theo cách tương tự. Nhưng nó có thể không rõ ràng đối với mắt người x sẽ không được thêm vào.


(*) Chi tiết ở đây là kết nối sẽ tạo ra mộtmớiChuỗi (trừ khi hai toán hạng là biểu thức không đổi, trong trường hợp đó việc nối được thực hiện tại thời điểm biên dịch), tức là. someString + ""!= someString,mặc dù (someString + "").bằng(someString)

Về java - mục đích của dấu ngoặc kép ("") nối với số nguyên, chúng tôi tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/58297636/

28 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress