Rumah >Java >javaTutorial >Mengapa Pengubahsuaian Pembolehubah dalam Blok Akhirnya Tidak Mempengaruhi Nilai yang Dipulangkan?

Mengapa Pengubahsuaian Pembolehubah dalam Blok Akhirnya Tidak Mempengaruhi Nilai yang Dipulangkan?

Barbara Streisand
Barbara Streisandasal
2024-11-16 17:02:03874semak imbas

Why Does Modifying a Variable in a Finally Block Not Affect the Returned Value?

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:

public class Test {

    private String s;

    public String foo() {
        try {
            s = "dev";
            return s;  // Return the value of s
        }
        finally {
            s = "override variable s";
            System.out.println("Entry in finally Block");
        }
    }

    public static void main(String[] xyz) {
        Test obj = new Test();
        System.out.println(obj.foo());
    }
}

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:

Entry in finally Block
dev

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:

  • Pernyataan pulangan dalam blok cuba melengkapkan pelaksanaan blok dan segera mengembalikan nilai s pada masa itu.
  • Mana-mana perubahan yang dibuat kepada pembolehubah s dalam blok akhirnya berlaku selepas penyataan pulangan telah dilaksanakan. Oleh itu, nilai s yang dikembalikan kekal "dev" walaupun blok akhirnya telah mengubah suainya.

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn