一.在java中将数据类型分为基本数据类型和引用数据
(1)基本数据类型保存在栈中, 在java中有八中基本数据类型:byte,short,int,long,char , float,double, boolean
例:
int num=10;
double num2=20.5 ;
内存图如下:
(2)引用数据类型保存在堆中,在栈中只保存引有数据类型的引用也就是地址. 在java中引用数据类型有:数组,类,接口
例:
class Student{
String name;
int age;
char sex;
}
Student stu=new Student();
stu.name=”小王”;
stu.age=20;
stu.sex=’男’;
int[] arr={10,20,30,40};
二.基本数据类型在传递数据时,传值的副本,另一个值发生改变时,不影响原值。引用数据类型在传递数据时,传地址的副本,一个发生改变时,影响另一个. 除非引用指向新对象
例:传基本数据类型
int a=100;
int b=a;
b=0;
System.out.println(a);
System.out.println(b);
代码分析如下:
分析如下:
a=100 : a有一张100的人民币
b=a; 传值的副本: a将100块钱复制给了b, 即a和b各拥用100块钱
b=0; b将复制后的100变成0, 对A没有影响
输出结果是:a=100(原值不变), b=0;
例2:传引用数据类型
class 保险柜{
int money;
}
保险柜 xkey=new 保险柜();
xkey.money=100;
保险柜 ykey=xkey;
ykey.money=0;
System.out.println(xkey.money);
代码分析如下:
保险柜 xkey=new 保险柜(); //xkey为引用,相当于打开保险柜的钥匙
xkey.money=100; //得用xkey钥匙入保险柜中存入100元人民币
保险柜 ykey=xkey; //ykey为引用与xkey指向同一对象,即内存中只有一个保险柜,但有两把钥匙
ykey.money=0; //通过ykey这把钥匙,把保险柜中的人民币变成0
图分析:
输出结果为:0 (因为内存中只有一个保险柜对象)
例3:传引用数据类型
class 保险柜{
int money;
}
保险柜 xkey=new 保险柜();
xkey.money=100;
保险柜 ykey=xkey;
ykey=new 保险柜();
ykey.money=0;
System.out.println(xkey.money);
代码分析如下:
保险柜 xkey=new 保险柜(); //xkey为引用,相当于打开保险柜的钥匙
xkey.money=100; //得用xkey钥匙入保险柜中存入100元人民币
保险柜 ykey=xkey; //ykey为引用与xkey指向同一对象,即内存中只有一个保险柜,但有两把钥匙
ykey=new 保险柜(); //内存中产生了一个新的保险柜, ykey为新保险柜的钥匙
ykey.money=0; //通过ykey这把钥匙,把新保险柜中的人民币变成0
图分析:
输出结果为:100 (因为内存中新产生了保险柜对象,对原保险没有影响)