简介:
所谓的基本数据类型,是指CPU可以直接进行运算的类型,包括以下几种:
● 整数型:byte、short、int、long;
● 浮点型:float、double;
● 字符型:char;
● 布尔型:boolean
八大基本数据类型
基本类型:简单数据类型是不能简化的、内置的数据类型、由编程语言本身定义,它表示了真实的数字、字符和整数
属性 | 作用 |
---|---|
byte: | Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0 |
short: | 短整型,在内存中占16位,即2个字节,取值范围-32768~32717,默认值0 |
int: | 整型,用于存储整数,在内在中占32位,即4个字节,取值范围-2147483648~2147483647,默认值0 |
long: | 长整型,在内存中占64位,即8个字节-263~263-1,默认值0L |
float: | 浮点型,在内存中占32位,即4个字节,用于存储带小数点的数字(与double的区别在于float类型有效小数点只有6~7位),默认值0 |
double: | 双精度浮点型,用于存储带有小数点的数字,在内存中占64位,即8个字节,默认值0 |
char: | 字符型,用于存储单个字符,占16位,即2个字节,取值范围0~65535,默认值为空 |
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();
}