基本数据类型与引用数据类型的区别(java基础)
八大基本数据类型
基本类型:简单数据类型是不能简化的、内置的数据类型、由编程语言本身定义,它表示了真实的数字、字符和整数
:
1,-----byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0
2,-----short:短整型,在内存中占16位,即2个字节,取值范围-32768~32717,默认值0
3,----- int:整型,用于存储整数,在内在中占32位,即4个字节,取值范围-2147483648~2147483647,默认值0
4,-----long:长整型,在内存中占64位,即8个字节-263~263-1,默认值0L
5-----,float:浮点型,在内存中占32位,即4个字节,用于存储带小数点的数字(与double的区别在于float类型有效小数点只有6~7位),默认值0
6,-----double:双精度浮点型,用于存储带有小数点的数字,在内存中占64位,即8个字节,默认值0
7,-----char:字符型,用于存储单个字符,占16位,即2个字节,取值范围0~65535,默认值为空
8,-----boolean:布尔类型,占1个字节,用于判断真或假(仅有两个值,即true、false),默认值false
:
🍟 引用数据类型
引用数据类型:Java语言本身不支持C++中的结构(struct)或联合(union)数据类型,它的复合数据类型一般都是通过类或接口进行构造,类提供了捆绑数据和方法的方式,同时可以针对程序外部进行信息隐藏
:
所有的非基本数据类型都是引用数据类型, 大致包括:类、 接口类型、 数组类型、 枚举类型、 注解类型、 字符串型
例如,String类型就是引用类型,还有Double,Byte,Long,Float,Char,Boolean,Short(注意这里和基本类型相比首字母是大写)
🍟 值传递
🍧传递基本数据类型时,传递的是真实的数据,形参的改变,不影响实际参数的值
public class Main{
public static void main(String[] args){
int msg = 100;
System.out.println("调用方法前msg的值:\n"+ msg);//100
update(msg);
System.out.println("调用方法后msg的值:\n"+ msg);//结果还是100
}
public static void update(int temp){
temp = 0;
}
}
由上可以看出,传递基本数据类型时,形参的改变,不影响实际参数的值
:
🍧传递引用数据类型时,传递的是地址值,形参的改变,影响实际参数的值
public class Main{
public static void main(String[] args){
int[] msg = {1,2,3};
//我们直接输出数组,返回的是他的地址值
System.out.println(msg);// [I@2503dbd3
System.out.println("调用方法前值:\n"+ msg[0]);//1
update(msg);
System.out.println("调用方法后值:\n"+ msg[0]);//0
}
public static void update(int[] msg){
msg[0] = 0;
}
}
由上可以看出,传递引用数据类型时,传递的是地址值,形参的改变,将地址里面的值改变了,影响实际参数的值
🍟 猜想:
不论是基本数据类型还是引用类型,他们都会先在栈中分配一块内存,对于基本类型来说,这块区域包含的是基本类型的内容;而对于对象类型来说,这块区域包含的是指向真正内容的指针,真正的内容被手动的分配在堆上
:
🍟装箱和拆箱
我们将基本数据类型转化为引用数据类型的过程叫做装箱,相应的,我们把从引用数据类型转化为基本数据类型的过程叫做拆箱
:
public static void main(String[] args) {
//创建两个Integer对象
Integer x=new Integer("10");
Integer y=new Integer("10");
//创建两个int类型变量
int m=10;
int n=10;
//valueOf的作用是将int变量转化成Integer对象
//将int类型变量“手动”装箱
Integer m1=Integer.valueOf(m);
Integer n1=Integer.valueOf(n);
//intValue的作用是将Integer对象转化成int类型
//将Integer对象“手动”拆箱
int v1=x.intValue();
int v2=y.intValue();
}