Javaリファレンス変数付与について
1379 ワード
一般的にjavaに値を割り当てるのは安全です(C C++に対して)、
Javaで オブジェクトをパラメータとして関数に入力し、パラメータに値を割り当てます. 一般的には成功する
パラメータと実パラメータが指すスタックメモリの同じアドレスだから
さっき集合付与時に問題が発生しましたが、
出力結果
検出: リストの値に変化はありません
自分が何を考えているのか
スタック変数temp リストのノードを先に指す
そしてtempをaiに向けます
この2つのプロセスはlistに何の変化もありません 単純なtempが参照先を変えただけだ
参照型変数の割り当てに注意 変更されたのは参照先のアドレスだけです
次に、参照型変数の内部非参照型データを見てみましょう. 単純にリファレンス割り当てを渡すと、2つのリファレンス変数は同じメモリ領域を指すのでlist 2の値を変更します. List 1の値も同様に変更されました
Javaで オブジェクトをパラメータとして関数に入力し、パラメータに値を割り当てます. 一般的には成功する
パラメータと実パラメータが指すスタックメモリの同じアドレスだから
さっき集合付与時に問題が発生しましたが、
List list=new arrayList();
AccountInfo ai=new AccountInfo();
for(AccountInfo temp : list)
{
temp=ai;
}
このコードは、listの各サブアイテムをaiに割り当てることを意味する.出力結果
検出: リストの値に変化はありません
自分が何を考えているのか
スタック変数temp リストのノードを先に指す
そしてtempをaiに向けます
この2つのプロセスはlistに何の変化もありません 単純なtempが参照先を変えただけだ
参照型変数の割り当てに注意 変更されたのは参照先のアドレスだけです
次に、参照型変数の内部非参照型データを見てみましょう. 単純にリファレンス割り当てを渡すと、2つのリファレンス変数は同じメモリ領域を指すのでlist 2の値を変更します. List 1の値も同様に変更されました
package com.aaa.socketTest;
import java.util.ArrayList;
import java.util.List;
public class ListTest {
public static void main(String[] args){
// list1
List list1=new ArrayList();
ClassA a=new ClassA(1, "aaa");
list1.add(a);
ClassA b=new ClassA(2, "bbb");
list1.add(b);
ClassA c=new ClassA(3, "ccc");
list1.add(c);
// list1 list2
List list2=new ArrayList();
for(int i=0;i