LoginSignup
3
6

More than 5 years have passed since last update.

Apex での引数の扱いについて

Last updated at Posted at 2018-11-17

Apexにおいては、プリミティブデータ型は値渡し、非プリミティブ型は参照渡しとざっくり覚えてましたが、どうも挙動を見ていると厳密にはJavaと同じく「参照の値渡し(共有渡し)」と呼ばれる動きになってるっぽい。

Example__c e1 = new Example__c(Name = 'hoge');

System.assertEquals('hoge', e1.Name); 

fuga(e1);

System.assertEquals('fuga', e1.Name); 

void fuga(Example__c e2) {
    e2.Name = 'fuga';

    e2 = new Example__c(Name = 'fugafuga');
    System.assertEquals('fugafuga', e2.Name); 
}

e1の値は、fugaで書き換えた'fuga'には書き換わりますが、その後newした時の'fugafuga'には書き換わりません。

よく見ると、開発者ガイドでもそれっぽいこと書いてますね。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_classes_defining_methods.htm

メソッド内の参照を別のオブジェクトを指し示すように変更することはできませんが、オブジェクトの項目の値は変更できます。

3
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
6