JAVA没有传值与传引用之一说法,应该是Java 中所有的传递都是值,但是还是有区分
1.基本数据类型的传递:传值
2. 引用数据类型传递:传引用 就是把变量的储存引用地址的传递
数据类型可简单分为:基本数据类型和引用数据类型
八大基本类型:
1.整数型:byte short int long;
2.浮点型:float double;
3.字符型:char;
4.布尔型:boolean;
引用数据类型:类class 接口interface 数组[];
今天主要总结传值和传引用;
在计算机内存中有两种内存 一种是栈内存,以及一种是堆内存;
基本数据类型创建新的类如(Jframe jf=new JFram());)实在栈内存中开辟一个专属空间用来存储,当另一个类(Listener l=new Listener();)创建时,会开辟另一块空间让他储存,
应用数据类型的创建:是在栈内存中储存着这个数组b[]的地址(以数组为例),再到堆内存中开辟一个内存用来存储数组b[],只要能找到下标[0]就能其他下标的值(如图3所示)
看下面的代码和注释:
public class Jframe {
int a=10;//定义一个整数型变量a 把10 赋值给a;
int[] b=new int[4];//定义一个整数型数组 b,长度为3(0,1,2,3);
public void text(Listener l) {//用函数 text调用类Listener 的方法和属性
l.a=a;//把类Jframe里的a赋值给 l的属性a
l.b=b;//把类Jframe的数组b的存储地址传引用给l的数组b
}
public static void main(String[] args) {
Jframe jf=new Jframe();
jf.a=20;//把20赋值给jf。a;
jf.b[0]=30;//把30赋值 给对象jf的数组b[0]下标为0 ;
Listener l=new Listener();//创建一个新的Listener对象用来调用Listener方法和属性
jf.text(l);//对象jf调用text方法(l)这样才能把数组 l。b[0]=60;的值传过来,放到最后会出现
//l.b[0]="null"的现象
l.a=50;//赋值
l.b[0]=60;
//输出
System.out.println("jf.a="+jf.a+" jf.b="+jf.b[0]);
}
}
另一个类Lisstener
public class Listener {
int a;
int[] b;
}
传递的方式和结果:如下图所示
简单总结:传引用中;传递的是地址:别的类可以通过获得你的地址改变你在堆内存中的数据,如b[0]=60;的过程,二基本数据类型 传值并不会改变原来类的值,如jf.a=20;l.a=50;
代码问题
代码20:jf.text(1)应该放在第17行,因为放在20 行这个时候l.b[0]=60;还没有通过jf.text(1)获得类jf的地址所以打印不出来,因为代码是一行一行来运行的,你调用方法(20行代码)的时候还没有获得地址,所以输出结果为 19 行的 b[0]的值为null;



