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 stub
int 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 stub
User 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;
}
}
内存变化示意图: