パラメータは、(文字列を含む)の基本的なデータ型を変更されたJavaパラメータは元の値の残りの部分に影響を与えるかは影響しません

JAVA 8つの基本データ型

文字型のcharブール値boolean型のバイト、短い、int型、長い、フロート、ダブル
特殊なタイプString

実績のある8つの基本データ型と対応するString型とパッケージングは​​、形状パラメータ値の変更の値に影響を与えそれ自体ではありません。

コード

import java.util.List;
import java.util.ArrayList;

class Solution {
	public void test(int a){
		a=2;
	}
	public void test(int[] a){
		a[0]=5;
		a[1]=5;
	}
	public void test(ArrayList a){
		a.clear();
		a.add(new Integer(5));
	}
	public void test(Integer a){
		a=15;
	}
	public void test(String a){
		a="改变了";
	}
	public void test(animal a){
		a.ans=10;
	}
	
    public static void main(String[] args) {
		Solution a=new Solution();
		
		int exam1=1;
		a.test(exam1);
		System.out.println("int类型测试:"+exam1);
		
		int[] exam2={1,2};
		a.test(exam2);
		System.out.println("int数组类型测试:"+exam2[0]+" "+exam2[1]);
		
		ArrayList<Integer> exam3=new ArrayList<>();
		exam3.add(new Integer(1));
		a.test(exam3);
		System.out.println("List测试:"+exam3.get(0));
		
		Integer exam4=new Integer(1);
		a.test(exam4);
		System.out.println("Integer包装类测试:"+exam4);
		
		String exam5="未改变";
		a.test(exam5);
		System.out.println("String类型测试:"+exam5);
		
		animal exam6=new animal(1);
		a.test(exam6);
		System.out.println("自定义类型测试:"+exam6.ans);
	}
    
    
    //自定义类型测试
    public static class animal{
    	int ans;
    	public animal(int ans){
    		this.ans=ans;
    	}
    }
}

結果

int类型测试:1
int数组类型测试:5 5
List测试:5
Integer包装类测试:1
String类型测试:未改变
自定义类型测试:10

理由

基本タイプ:値は、現在のスタックフレームの値を変更し、変更、メソッドの実行端が方法に変更を加えないであろういずれの場合にも、ローカル変数テーブルに格納され、変数アウターケースは、アクティブな割り当てに戻す必要があり、変更する必要があります。

参照データ型:ローカル変数テーブルのポインタは、メソッドを呼び出すとき、参照プッシュのコピー、基準の割り当て変更のコピーのみ。コピーが直接基準値、変更されたオブジェクトの参照アドレスを変更する場合は、このアドレス参照は、外部この時間経過の方法が変更されたオブジェクト。

変更は、パラメータ値に影響を及ぼさなかったので、実際には、基本データ型の同等と文字列が渡されたが、実際にはコピーです。カスタムタイプを含む残りの種類は、実際にそれに参照パラメータ変更、引数の変更を通過しながら。

公開された15元の記事 ウォンの賞賛0 ビュー182

おすすめ

転載: blog.csdn.net/qq_36360463/article/details/103979790