samwellwang

samwellwang

coder
twitter

Javaは値渡しですか、それとも参照渡しですか

Java は結局™値渡しなのか参照渡しなのか、今日コードを書いているときに面白いことに気づきました。つまり、私は 2 つの参照オブジェクトを変換関数に渡しました。

2020-03-30

Java は結局™値渡しなのか参照渡しなのか#

今日コードを書いているときに面白いことに気づきました。つまり、私は 2 つの参照オブジェクトを変換関数に渡しました。結果、私の関数は効果がありませんでした!!最初はコンパイルの問題だと思っていましたが、
クリーン後もダメでした。何度も試して、ほぼ 1 時間が経ちました。本当にイライラしました。まさか、基本的なパラメータ型は値渡し、参照型は参照渡しだと思っていたのに?いろいろ学んだ結果、やはり私が思っていたこととは違い、Java の規約が正しいのです!

余計な話は置いておいて、まず結論を述べます:確実に値渡しです!
基本型については多くを語る必要はありませんが、渡されるのは基本型のコピーです。
しかし、参照型については、参照アドレスのコピーが渡されることに注意してください。
コードを見てみましょう:

package com.dareway.demo;

public class Person{
	public String name;
	public int age;
	Person(){
		
	}
	Person(String n ,int a){
		this.name=n;
		this.age=a;
	}
}

public class Test{

	public static void main(String[] args) {
		Person one = new Person("wang",22);
		Person two = new Person("yang",23);
		switchEach(one,two);
		System.out.println("one's name :"+one.name);
		System.out.println("two's name :"+two.name);
		
	}

出力結果:

p1's name :yang
one's name :Jisoo
two's name :yang

つまり、渡された参照パラメータは内部の状態を変更できますが、新しいアドレスを指すことはできません。なぜなら、コピーされるのはアドレスのコピーだけだからです。

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。