参数分析

哈哈哈~时隔多(ban)年(xue qi), 终于又来写技术博客了 \(^o^)/~
今天学习的是参数分析,感觉解决了自己多年的困惑呢(✿◡‿◡)
1.数据类型
数据类型有两种:基本数据类型和引用数据类型
基本数据类型】8种:boolean , byte , short , long , int , float , double , char ;
引用数据类型】 4种:数组,类,接口,抽象类。

2.参数传递
(1)示例:传递int数据
◤代码◢

 

	int a = 10;
	int b = 10; 

 

	int a = 10;
	int b = a;
	a = 0;
	System.out.println("a--->"+a);
	System.out.println("b--->"+b);
◤输出结果◢
a--->0
b--->10
 
◤结果分析◢
    基本数据在内存中的存储方式:
    a和10都是存储在栈内存中的,且栈中的数据可以共享。这里a和b都是一个指向int类型的引用。
    编译器先处理 int a =10,首先他会在栈中创建一个变量为a的引用,然后去查找有没有字面值为10的地址
,没找到就开辟一个存放10这个值的地址,然后将a指向10的地址;在创建完b这个引用变量后,栈中已经有了
10这个字面值,所以b直接指向10的地址,这样就出现了a、b同时指向10的情况。
    而当处理a=0时,编译器会首先搜索栈内是否有值为0的地址,有则直接将a指向该地址,没有则开辟一个地
址来存放4这个值,所以并不会影响到b。

◤代码◢
public class Student {
	private String name;
	private int age;
	
	public Student(String name, int age){
		this.name = name;
		this.age = age;
	}
        public void setAge(int age){
		this.age = age;
		age++;//参数加一
		System.out.println("1--->"+age);//输出
	}
}
public class Main {
	public static void main(String[] args) {
		Student stu = new Student("张三",0);
		int age = 19;
		stu.setAge(age);
		System.out.println("2--->"+age);//输出
	}
}
◤输出结果◢ 
1--->20
2--->19

◤结果分析◢
   这里就是把age这个变量的19这个值传递给了setAge()方法中的age。

(2)示例:传递对象 ◤代码◢ ◤输出结果◢ 1--->王五 2--->王五 ◤结果分析◢ (3)示例:传递字符串  ◤代码◢
public void setName(String name){
		name = "李四";
		System.out.println("1--->"+name);
	}
public class Main {
	public static void main(String[] args) {
		Student stu = new Student();
		String name = "张三";
		stu.setName(name);
		System.out.println("2--->"+name);
	}
}
◤输出结果◢
1--->李四
2--->张三

◤结果分析◢
String传递时传递了一个地址给形参没错,但是String是不可修改的,所以当方法中的String修改时,就就开辟
了新的堆内存,而方法中的形参也就指向了新的地址,则原地址中的内容不会有任何修改。
※ 总结 ※
【值传递】 
    值传递适用于:基本数据类型及String;
    传递的是数据
    与实例进行类比,就像复印一份文件,把复印件上的信息修改并不会影响到原件上的内容,同理当基本数
据和字符串作为参数进行传递时,是传递值也就是数据的复制,无论这个复制值怎么修改也不会影响到原值。
【引用传递】
    引用传递适用于:引用数据类型,String除外;
    传递的是地址
    与实例进行类比,就像需要修改某个数据直接找到原文件,在原文件上修改,所以再看原文件时数据也已
经被修改了。

猜你喜欢

转载自1826320416.iteye.com/blog/2212611