JAVA入门级教学之(参数传递)
问题引入:
参数分为形式参数还有实际参数,我们传入是的数据到底是什么呢?
方法调用的时候,涉及参数传递的问题,
传递的时候,java只遵循一种语法机制
就是将变量中保存的“值”传递过去了
有的时候这个值是一个字面值1...22233..221
有的时候这个值是另一个java对象的内存地址0x1234
以下是伪代码:
int i=10;
int j=i;
i传递给了j,实际上只是将i变量中保存的10传递给j了,j实际上是一块全新的内存空间
User u=0x1234;
User u2=u;
User u2=0x1234;
u传递给了u2,实际上是将ox1234这个值赋值给了u2了,u和u2实际上是两个不同的局部变量
但是他们这两个变量指向堆内中同一个java对象
其实u这个变量它储存了两个值,一个值是指向堆内存的引用值0x1234,一个值是它本身在栈内存中的位置值00cc222
定义一个测试类:
package com.lbj.javase04;public class Test01 {public static void main(String[] args) {// TODO Auto-generated method stubint i=10;//add方法调用的时候,给add方法传递了一个变量i,到底传递的是什么?//java语言中方法调用的时候涉及到参数传递的问题//参数传递实际上传递的是变量中保存的具体值。Test01.add(10);//add(10);System.out.println("i:"+i);//10}public static void add(int i){i++;System.out.println("i:"+i);//11}}
实际调用的内存示意图:
再定义一个测试类:
package com.lbj.javase05;
/*** 参数传递的过程实际上是传递变量的"值",这个值可以是数值类型的,也可以使引用地址类型的* @author 14811**/
public class Test02 {public static void main(String[] args) {// TODO Auto-generated method stubUser u=new User(20);//传递u给add方法的时候,实际上传递的是u变量中保存的量,只不过这个值是一个java对象的内存地址add(u);System.out.println(u.age);//21}public static void add(User u){u.age++;System.out.println(u.age);//21}}
class User{int age;public User(int i){age=i;}
}
内存变化示意图: