栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

关于JAVA传值的问题的初步总结(1)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

关于JAVA传值的问题的初步总结(1)

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;

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/582846.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号