目录
前言
简单介绍了数据类型的概念、数据类型划分、基本数据类型转换(主要针对基本数据类型)
一、数据类型的概念
数据类型在计算机语言里面,是对内存位置的一个抽象表达方式,可以理解为针对内存的一种抽象的表达方式。接触每种语言的时候,都会存在数据类型的认识,有复杂的、简单的,各种数据类型都需要在学习初期去了解,Java是强类型语言,所以Java对于数据类型的规范会相对严格。数据类型是语言的抽象原子概念,可以说是语言中最基本的单元定义,在Java里面,本质上讲将数据类型分为两种:基本类型和引用数据类型。
基本类型:简单数据类型是不能简化的、内置的数据类型、由编程语言本身定义,它表示了真实的数字、字符和整数。
引用数据类型:Java语言本身不支持C++中的结构(struct)或联合(union)数据类型,它的复合数据类型一般都是通过类或接口进行构造,类提供了捆绑数据和方法的方式,同时可以针对程序外部进行信息隐藏。
二、数据类型划分
1)基本数据类型:byte、short、int、long、double、float、boolean、char
2)引用数据类型:类、接口、数组、枚举、注解
基本数据类型的具体定义对象如下:
总结:
1.数字字面量:程序中出现的数字
整数数字默认为int类型
小数数字默认为double类型
2.float的值一定要加上f
3.字符类型的值必须使用单引号括起来
4.字符类型的值只能是一个字符
5.布尔类型的值只有true和flase
6.1个字节等于8bit(二进制中的位数)
7.取值范围:
byte:-128~127
int:-21亿~21亿
char:0~65535
8.boolean使用4个字节表示
原因:计算机底层没有boolean类型机器指令,boolean底层使用int(4字节)来表示 效率高 boolean类型的数组中元素是用1个字节表示
三、基本数据类型转换
Java的数据类型转换主要分为两种:自动转型和强制转型
数值型的取值范围排序:byte<short<int<long<float<double
自动转型:
取值范围小 转 大
//直接将float转成double
float f = 123.00f
double d = f;
//直接将byte转成double
byte b1 = 123;
double d1 = b1;
System.out.println(d1);
强制转型:
取值范围大 转 小
语法规则:
变量 = (强转的类型)目标变量;
double d = 123.123;
float f = (float)d;//1.将double类型的变量d强转为float类型
// 2.再将强转后的数据赋值给float类型的变量f
long l = (long)f;
int i = (int)l;
short s = (short)i;
byte b = (byte)s;
System.out.println(b);
//直接将double转成byte
double d2 = 123.123;
byte b2 = (byte)d2;
System.out.println(b2);
特殊点:
案例一:
byte b1 = 1;//1为int类型的数字字面量,但是1在byte类型的取值范围内,就直接赋值
//byte b2 = 128;//报错:128为int类型的数字字面量,但是128不在byte类型的取值范围内,所以报错
//解决方案:
byte b2 = (byte)128;
//底层分析:
//128 -- int - 32位 :0000,0000,0000,0000,0000,0000,1000,0000
//(byte)128 - 8位 :1000,0000
System.out.println(b1);
System.out.println(b2);//-128
案例二:
//12345678901为int类型的数字字面量,但是该数字已经超过了int类型的取值范围,所以会报错
int i = 12345678901;
案例三:
//12345678901为int类型的数字字面量,但是该数字已经超过了int类型的取值范围,所以会报错
long l1 = 12345678901;
//12345678901L为long类型的数字字面量,该数字没有超过了long类型的取值范围,所以不会报错
long l2 = 12345678901L;
案列四:
float f1 = 1;//int转float:自动转型
//float f2 = 1.0;//double转float:强制转型
//解决方案1:
float f2 = (float)1.0;//将double(64位)转float(32位),浪费空间
//解决方案2:
float f2 = 1.0f;//直接认为1.0为float(32位),效率更高
System.out.println(f1);
System.out.println(f2);
问 哪一种方案更优
解决方案1:将double(64位)转float(32位)有空间的损失
解决方案2:直接认为1.0为float(32位),效率更高
总结
简单介绍了数据类型的概念、数据类型划分(基本数据类型、引用数据类型)、基本数据类型转换(自动转型、强制转型、特殊点)