Mengapa Tidak Mengubah Suai Pembolehubah dalam Blok Akhirnya Mempengaruhi Nilai yang Dipulangkan?
Java menyediakan pernyataan cuba-akhir, di mana kod dalam blok akhirnya sentiasa dilaksanakan, tidak kira sama ada blok cuba selesai secara normal atau mengejut. Walau bagaimanapun, tingkah laku ini boleh membawa kepada hasil yang tidak dijangka apabila pembolehubah diubah suai dalam blok akhirnya selepas pernyataan pulangan dilaksanakan dalam blok cuba.
Untuk menggambarkan konsep ini, pertimbangkan kelas Java berikut:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
Dalam contoh ini, kaedah foo mengembalikan rentetan "dev" dalam blok cuba. Walau bagaimanapun, blok akhirnya mengubah suai pembolehubah s kepada "mengatasi pembolehubah s" dan mencetak mesej untuk menunjukkan bahawa ia telah dilaksanakan.
Anehnya, output kod ini ialah:
1 2 |
|
Keputusan ini mungkin kelihatan berlawanan dengan intuisi kerana kami menjangkakan nilai s akan "mengatasi pembolehubah s" selepas blok akhirnya dilaksanakan. Walau bagaimanapun, ini tidak berlaku kerana:
Adalah penting untuk ambil perhatian bahawa tingkah laku ini hanya terpakai pada perubahan pada nilai pembolehubah s itu sendiri. Jika pembolehubah s adalah rujukan kepada objek boleh ubah, perubahan kepada kandungan objek yang dibuat dalam blok akhirnya akan ditunjukkan dalam nilai yang dikembalikan.
Penjelasan terperinci ini menjelaskan mengapa mengubah suai pembolehubah dalam blok akhirnya. tidak mengubah nilai pulangan kaedah, walaupun blok akhirnya sentiasa dilaksanakan.
Atas ialah kandungan terperinci Mengapa Pengubahsuaian Pembolehubah dalam Blok Akhirnya Tidak Mempengaruhi Nilai yang Dipulangkan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!