JavaSE第四章 数据类型

数据类型

1.1 数据类型有什么用

  • 数据类型用来声明变量,程序在运行过程中根据不同的数据类型分配不同大小的空间

1.2 数据类型的分类

  • 总体上分为两大类:基本数据类型和引用数据类型
  • 基本数据类型
    基本数据类型又可以划分为4大类8小种:
  1. 整数型
    byte(1字节)[-128 ~ 127]
    short(2字节)[-32768 ~ 32767]
    int(4字节)[-2147483648 ~ 2147483647]
    long(8字节)
    Java中,在任何情况下,整数型的“字面量”默认被当作int类型处理
  2. 浮点型
    float(4字节)
    double(8字节)
  3. 布尔型
    boolean(1字节):只有两个值true和false,true表示真,false表示假
  4. 字符型
    char(2字节)[0~65535]:Java中规定字符型字面量必须使用单引号括起来,属于文字
  • 引用数据类型
    引用数据类型包括:String、class、数组、enum、interface
    字符串型String属于引用数据类型,不属于基本数据类型范畴
    Java中除了基本数据类型之外,剩下的都是引用数据类型
    引用数据类型后期面向对象的时候才会接触
    区别:占用的空间大小不同

1.3 计算机存储单位

  • 计算机只能识别二进制
    1字节 = 8bit(8比特),1bit就是一个1或0
1byte = 8bit
1KB = 1024byte
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB

byte b = 2;在计算机中是这样表示的:00000010
short s = 2;在计算机中是这样表示的:00000000 00000010
int i = 2;在计算机中是这样表示的:00000000 00000000 00000000 00000010

1.4 进制转换

1.5 byte类型的取值范围

  • byte是 [-128 ~ 127] 共可以表示256个不同的数字。
    byte类型的最大值是怎么计算出来的
    byte是1个字节,是8个比特位,所以byte可以存储的最大值是:
    01111111
    注意:在计算机当中,一个二进制位最左边的是符号位,当为0时表示正数,当为1时表示负数,所以byte类型最大值是:01111111,即2的7次方 - 1
  • short和char实际上容量相同,不过char可以表示更大的数字,因为char表示的是文字,文字没有正负之分,所以char可以表示更大的数字

1.6 字符编码

  • 其中byte,short,int,long,float,double,boolean,这7种类型计算机表示起来比较容易,因为他们都是数字。对于char类型来说计算机表示起来比较麻烦,因为char对应的是文字,每一个国家的文字不一样,文字不能直接通过“自然算法”转换成二进制,于是字符编码诞生了
  • 什么是字符编码
    字符编码是人为定义的一套转换表,在字符编码中规定了一系列的文字对应的二进制,字符编码其实本质上就是一本字典,该字典中描述了文字与二进制之间的对照关系,字符编码是人为规定的(是某个计算机协会规定的)
    字符编码涉及到编码和解码两个过程,编码和解码的时候必须采用同一套字符编码方式,不然就会出现乱码
  • 随着计算机的发展,计算机开始支持文字,最先支持的文字是英文,英文对应的字符编码方式是:ASCII码。ASCII码采用1byte进行存储,因为英文字母是26个。(键盘上所有的键全部算上也超不过256个,1byte可以表示256种不同的情况,所以英文本身在计算机方面就占有优势)
  • 随着计算机语言的发展,后来国际标准组织制定了ISO-8859-1编码方式,又称为latin-1编码方式,向上兼容ASCII码,但不支持中文。后来发展到亚洲,才支持中文,日文,韩文…
    简体中文的编码方式:GB2312<GBK<GB18030 (容量的关系)
    繁体中文的编码方式:big5(台湾使用的是大五码)
  • 在Java中,Java语言为了支持全球所有的文字,采用了一种字符编码方式叫做Unicode编码。Unicode编码统一了全球所有的文字,支持所有文字。
    具体的实现包括:UTF-8,UTF-16,UTF-32…

1.7 转义字符

  • 在字符常量中使用单引号,反斜杠以及双引号时,都必须使用转义字符表示,即在这些字符前加上反斜杠
  • 有些特殊的字符在Java中无法正常使用或展示,因为有特殊的作用
    使用 \ + 要转义的字符
    \’
    \"
    \\
    \u 表示后面的是一个字符的Unicode编码(16进制)
    CMD运行 native2ascii.exe ,可以输入文字查看对应的Unicode编码(新版本JDK可能不支持)
    \t 制表符:一个制表符为8个空格,一个字母1个空格,一个汉字是2个空格
    如果前面的内容不够制表符位的整数倍,补全一整个制表符位
    \n 换行
    \r 光标回到行首
    \b 退格
System.out.println(" ' ");    //正确,不需要转义,这个单引号 ' 只是一个普通的字符,不具备特殊含义
System.out.println(" " ");    //错误
System.out.println('  ' ');    //错误
System.out.println(" '转义字符' ");    //正确

1.8 自动类型转换

  • 小容量可以自动赋值给大容量,这种操作被称为自动类型转换
    byte < short(char) < int < long < float < double

1.9 强制类型转换

  • 大容量转换成小容量,要想编译通过,必须加强制类型转换符,进行强制类型转换,但运行时可能出现精度损失
  • Java中,当某数据类型字面量没有超出另一个数据类型的取值范围,那么这个数据类型字面量可以直接赋值给另一个数据类型的变量
int y = (int)x;  //这个(int)就是类型转换符,加上编译会通过,但是运行时可能损失精度
byte x = 128;    //错误,byte取值范围为[-128,127],128超出byte的取值范围
byte x = 127;    //正确,没有超出byte的取值范围

1.10 类型转换遵循的规则

  1. 八种基本数据类型中,除 boolean 类型不能转换,剩下七种类型之间都可以进行转换;
  2. 如果整数型字面量没有超出 byte,short,char 的取值范围,可以直接将其赋值给byte,short,char 类型的变量;
  3. 小容量向大容量转换称为自动类型转换,容量从小到大的排序为:byte < short(char) < int < long < float < double,其中 short和 char 都占用两个字节,但是char 可以表示更大的正整数;
  4. 大容量转换成小容量,称为强制类型转换,编写时必须添加“强制类型转换符”,但运行时可能出现精度损失,谨慎使用;
  5. byte,short,char 类型混合运算时,先各自转换成 int 类型再做运算;
  6. 多种数据类型混合运算,各自先转换成容量最大的那一种再做运算(最终的结果类型是“最大容量”对应的类型)byte+char+short除外(上一条);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jayco-J

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值