五、数据类型

五、数据类型
           程序当中有很多的数据,每个数据都有相关的数据类型,不同数据类型占用空间大小是不同的,数据类型的作用是指导JVM在运行程序的时候给该数据分配多大的运行空间
           Java中数据类型分为两种
                      基本数据类型
                      引用数据类型

1.基本数据类型
(一)基本数据类型包括四大类八小种(该八小种全是关键字——全小写)
                      第一类:整数型
                      byte, short, int, long
                      第二类:浮点型
                      float, double
                      第三类:布尔型
                      boolean
                      第四类:字符型
                      char

补充:字符串不属于基本数据类型,属于引用数据类型。
           计算机任何情况下都只能识别二进制——现代计算机底层采用交流电的形式,只有接通和断电两种状态。
           八种数据类型各自占用空间大小:

基本数据类型     占用空间大小【单位:字节】
byte         1          00000000
short        2          00000000 00000000
int            4          00000000 *4
long          8         00000000 *8
float          4         00000000 *4
double      8         00000000 *8
boolean     1         00000000
char          2         00000000 00000000

(二)字节(Byte简写为B)
           1 Byte = 8 bit 【1个字节 = 8个比特】1个比特表示一个二进制位:1/0。位:又名比特(bit简写为b)
                      1 KB = 1024 Byte
                      1 MB = 1024 KB
                      1 GB = 1024 MB
                      1 TB = 1024 GB
           数据类型、取值范围及默认值(全部记忆)
举例:byte类型占用空间大小为1Byte,也就是00000000,其表示的范围也就是2的8次方(也就是256),

类型                 取值范围                 默认值
byte              【-128,127】               0
short         【-32768,32767】           0
int 【-2147483648,2147483647】   0
long                                                     0L
float                                                     0.0
double                                                 0.0
boolean         【true,false】             false
char               【0,65535】       \u0000

总括:八种基本数据类型默认值一切向0看齐。——成员变量没有手动赋值系统会赋值默认值,而局部变量不会赋值,会直接报错。
引用数据类型:默认值----->null

(三)第一类:整数型
          byte, short, int, long
        •Java语言当中的整数型字面值有三种表示方式:
第一种方式:十进制【是一种缺省、默认的方式】常用
第二种方式:八进制【在编写八进制整数型字面值时需要以0开始】
第三种方式:十六进制【在编写十六进制整数型字面值时需要以0x开始】

        ••在java语言当中“整数型字面值”被默认当做int类型来处理。
        声明long类型变量时,需要提供后缀l或L

(四)第二类:浮点型
         float, double
       float 单精度【4个字节】
       double 双精度【8个字节,精度较高】

       在java语句中,所有浮点型字面值,默认当做double类型来处理。
       声明float类型变量时,需要提供后缀f或F
注意:double和float在计算机内部二进制存储的时候存储的都是近似值。在现实世界当中有些数字是无限循环的,计算机资源是有限的,用有限的资源存储无限的数据只能存储近似值。
浮点型中小故事:double的精度太低【相对来说的】,不适合做财务计算或者存储,财务涉及到钱的问题,要求精度较高,所以SUN在基础SE类库当中为程序员准备了精度更高的类型,只不过这种类型是一种引用数据类型,不属于基本数据类型,它是:java.math.BigDecimal。其实java程序中SUN提供了一套强大的类库,java程序员基于这套基础类库进行开发的。SE类库字节码(位置):jre\lib\rt.jar SE类库源码:src.zip。
(五)第三类:布尔型
         bealoon
       •在java语言中boolean类型只有两个值:true、false,没有其他值,不像c语言当中,0和1表示假和真。
       ••在底层存储的时候boolean类型占用1个字节,因为实际存储的时候false底层是0,true底层是1。
       •••布尔类型在实际开发中非常重要,经常使用在逻辑运算和条件控制语句当中。
(六)第四类:字符型
         char
       char型数据表示通常意义上的字符,Java中所有字符均采用的是Unicode编码,故一个字符可以存储一个字母、汉字或者其他书面语言的字符。
       补充:Unicode 是国际标准字符集,它将世界各种语言的每个字符定义一个唯一的编码,以满足跨语言、跨平台的文本信息转换(Unicode包含ASCLL码),字符集是很多个字符的集合,字符编码是字符集的一种实现方式,把字符集中的字符映射(映射是集合与集合之间的一种对应关系)为特定的字节或字节序列,它是一种规则,比如:Unicode 只是字符集,UTF-8、UTF-16、UTF-32 才是真正的字符编码规则,UTF-8、UTF-16、UTF-32 中的 “UTF” 是 “Unicode Transformation Format” 的缩写,意思是"Unicode 转换格式",后面的数字表明至少使用多少个比特位来存储字符, 比如:UTF-8 最少需要8个比特位也就是一个字节来存储,对应的, UTF-16 和 UTF-32 分别需要最少 2 个字节 和 4 个字节来存储。Java语言当中绝大多数情况下使用UTF-8。
       ASCII码:
       ASCII码表的地址:https://ascii.org.cn/
       ASCII码共有128个字符,从十进制0到127来表示对应的字符。
一个英文占一个字节,一个中文占个字节。
       字符型变量的四种表现形式:
1.使用单引号(‘  ’)括起来单个字符

char c1 = 'a';
char c2 = '中';
char c3 = '8';
char c4 = '%';

2.使用单引号(‘  ’)括起来Unicode值表示字符型常量(不常用)
3.使用单引号(‘  ’)括起来转义字符\和单个字符组合的形式

char c1 = '\n';
char c2 = '\t';
char c3 = '\'';

4.不使用单引号(‘  ’)括起来,而是使用字符对应的数值

char c1 = 48//返回值为0,下图为ASCII码部分截图
char c2 = '0';//返回值为0,故char类型变量返回的是字符!
char c3 = '1',c4 = '2'; //定义char类型变量c3,c4分别为字符12
int i = c3 + c4;//返回结果i为99

在这里插入图片描述

(七)转义字符\(反斜杠或者说下坡)
         \n属于一个换行字符故可以放在char类型中。
         【换行符】(println表示输出之后自动换到下一行)
         \t也就是一个tab键故可以放在char类型中。
         【制表符】

        单个反斜杠不可以直接放在char类型当中它会把后一个单引号(’)进行转义成一个没有特殊含义的单引号,会报错。
       \’ 普通单引号
        \’’ 普通双引号

2.引用数据类型
         类(class)
         数组(array)
         接口(interface)
         枚举(enum)
         注解(annotation)
         记录(record)
二、数据类型转换
(一)自动类型转换:
(1)八种基本数据类型当中除布尔类型之外剩下七种类型之间都可以相互转换。
原因:布尔类型在Java中不存在0和1的形式。
(2)小容量向大容量转换,称为自动类型转换,容量从小到大排序:
        byte < short < int < long < float < double
                    char <

注:float类型比long类型取值范围要大,所以其容量大——容量大小与占用内存空间大小无关,而是与取值范围大小有关 。
char和short可表示的种类数量相同,但是char可以取更大的正整数。

long l1 = 123L;//正确书写格式
long l2 = 123;//int类型的值123赋给了long类型的l2
long l3 = 2147483648;//编译报错:int类型只能取到2147483647


float f1 = 1.0F;//正确书写格式
float f2 = 1.0;//编译报错:1.0默认是double类型,将其赋值给float类型属于强制类型转换!

byte b1 = 1;
byte b2 = b1 + 1;//编译报错:整型常量,规定为int类型!
byte b3 = b1 + 1.0;//编译报错:浮点型常量,规定为double类型!

int 123L = 12;
long l1 = 123L;//这就是为什么定义变量不能使用数字开头,会产生分歧!

(二)强制转换:
         只存在于大容量数据类型转换成小容量数据类型。

//强转原理:
原始数据:00000000  00000000  00000000  00000000  00000000  00000000  00000000  01100100
强转后的数据:00000000  00000000  00000000  01100100
//将左边二进制砍掉,所有强转都是这样完成的

         简单说一下:原始数据有八个字节,long类型或者double类型,强制转化成了四个字节的数据类型,int或者float类型。
         强制类型转换需要使用强转符:()。在()内指明要转换为的数据类型。

double d1 = 12.9;
int i1 = (int)d1;//截断!返回值为12,直接将小数部分去掉!

         大容量数据类型强制转换成小容量,容易出现精度损失,而且往往损失比较严重,慎重使用!
         使用类型转换符的不属于强制转换。(字面值后面加某些符号的)
(二)强制类型转换规则
(3)大容量转换成小容量,叫做强制类型转换,程序才能编译通过,但是在运行阶段可能会损失精度,所以慎重使用。
(4)当整数字面值没有超出byte,short,char的取值范围,可以直接赋值给byte,short,char类型的变量。
(5)byte,short,char混合运算或者byte与byte、short与short、char与char类型进行运算时,都先转换成int类型再做运算。
(6)多种数据类型混合运算(整数型、浮点型、字符型),先转换成容量最大的那种类型再做运算。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值