-1

重複の可能性:
Java は参照渡しですか?

(Integer、File、Boolean) のような Java クラスを使用した場合、インスタンスを引数として関数に渡し、この値を関数外で使用した後にその値を変更しようとすると、値は変更されません。

例えば:

private void run(){
        File tmpFile;
        setFile(tmpFile);
        System.out.println(tmpFile.getAbsolutePath());  //error tmpFile is null
    }

private void setFile(File xFile){
    xFile = jFileChooser.getSelectedFile();  // this returned object file
}
4

2 に答える 2

3

簡単に言えば、Java は参照による呼び出しではなく、値による呼び出しを使用するということです。

あなたのsetFileメソッドでは、への割り当てxFileはローカル変数のみを変更します。メソッドtmpFile内の変数は変更されません。run()

setFileが値を返すようにコードを記述する必要があります。例えば

    private void run(){
        File tmpFile = getFile();
        System.out.println(tmpFile.getAbsolutePath());
    }

    private File getFile() {
        return jFileChooser.getSelectedFile();
    }

setXXX(注:実際には何も設定しないで呼び出されるメソッドは不当に誤解を招くため、メソッド名を変更しました。)

于 2012-05-13T07:14:30.453 に答える
0

Javaは常に値を渡します。他の動作を期待するべきではありません。

メソッドは、参照を渡す場合にのみオブジェクトを変更できます(参照は引き続き値によって渡されます)

于 2012-05-13T07:13:44.197 に答える