PinkGuy / 数据类型
Created 2019-11-24 Modifyd 2019-11-24

3257 Words

前言:
程序当中有很多数据,每一个数据都是有相关的数据类型的,不同的数据类型占用空间的大小也不同.
数据类型的作用是指导JVM运行程序的时候给该数据分配多大的内存空间。

涩图

数据类型-介绍

java中的数据类型包括两种:

  • 基本数据类型
  • 引用数据类型 ###关于基本数据类型:
  • 基本数据类型包括 四大类 八小种
第一类:整数型 第二类:浮点型
byte,short,int,long float,double
第三类:布尔型 第四类:字符型
boolean char

字符串属于==引用数据类型

  • 字符串使用双引号“A”,
  • 字符 使用双引号‘A’;

八种数据类型各自所占用空间大小是多少?

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

计算机在任何情况下只能识别二进制.

1010101010101010010101010101010010101010...
【现代的计算机底层采用交流电的方式,接通和断开就两种状态,计算机只识别1或0,其他不认识】

什么是二进制?

  • 数据的一种标识形式,
    十进制表示满十进一原则

    0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
    

二进制表示满二进一原则

0 1 10 11 100 101 110 111 1000 1001....
0 1  2  3  4   5   6   7     8    9

涩图

字节(byte):

  • 1 Byte = 8 bit【1个字节 = 8个比特位】1个比特位表示一个二进制位:1/0
  • 1 KB = 1024 Byte
  • 1 MB = 1024 KB
  • 1 GB = 1024 MB
  • 1 TB = 1024 GB
  • 整数型当中Byte类型,占用一个字节,所以Byte类型的数据所占8个比特位。那么byte类型的取之范围是什么?

  • 关于java中的数字类型,数字都是有正负之分,所以在数字的二进制当中有一个二进制位被成为“符号位”。并且这个“符号位”在所有二进制的最左边,0表示正数,1表示负数;

    byte最大值:01111111[10000000(二进制) - 1]
    
  • byte类型最大值:2的7次方 - 1,结果是:127;

  • byte类型最小值:-128【】

  • byte类型的取值范围:[-128~127]

二进制和十进制之间的转化规则:

  • 二进制转换成十进制
  • 十进制转换成二进制

计算机只认识二进制,那么计算机是怎么表示现实世界中的文字呢?

  • 八种基本数据类型当中,byte,short,int,long,float,doble,boolean这7种比较容易表示,因为底层都是数字;十进制的数字和二进制之间存在一种固定的转换规则。
  • 但是八种基本数据类型当中char类型表示的是现实世界中的文字,文字和计算机二进制之间”默认”情况下是不存在任何转换关系的;
  • 为了让计算机可表示现实时间当中的文字,我们需要进行人为的干涉,需要人负责提前制定好“文字”和“二进制”之间的对照关系。这种对照转换关系被称为:字符编码;
  • 计算机最初只支持英文,最先出现的字符编码是:ASCII码

    'a' --> 97 
    'A' --> 65
    '0' --> 48
    
    'a' ---(按照ASCII解码)--> 01100001
    01100001 ---(按照ASCII编码)--->'a'
    
    //编码和解码的时候采用同一套字典/对照表,不会出现乱码。的时候采用的不是同一套对照表,会出现乱码
    

八种基本数据类型的取值范围:

类型 取值范围
byte [-128 ~ 127]
short [-32768 ~ 32767]
int [-2147483648 ~ 2147483647]
long
float
double
boolean [true,false]
char [0 ~ 65535]

Ps:short 和 char所表示的种类总数是一样的,只不过char可以表示更大的正整数,【因为char没有负数】


数据类型 ==默认值==
byte,short,short,int,long 0
float,double 0.0
boolean false
[在C语言中,true是1,false是0]
char \u0000

数据类型—char

转义字符

  • 转义字符 “\”

    //普通的n字符
    char c1 ='n';
    System.out.println(c1); //输出字符"n";
    
  • 换行符

    //这是一个“换行符”,属于char类型的数据
    //"\"反斜杠在java语言当具有转义功能
    char c2 = '\n';
    
  • tab键(制表符)

    //tab键(制表符)
    //==强调:制表符和空格键不同,他们的ASCII不一样,体现在键盘上两个不同的“按键”。==
    char y = '\t';
    System.out.print("A");
    System.out.print(y);
    System.out.print("B"); 
    //输出结果是A      B
    
  • 输出’\‘字符

    //反斜杠将后面的单引号转义成不具备特殊含义的普通单引号字符,
    //左边单引号缺少了结束的单引号字符;
    错误例子:  char k = '\';  //报缺少字符错
    //---------------------------------- 
    正确: char a = '\\'; 
            
    
    \n 换行符
    \t tab键
    \' 普通的单引号
    \\ 普通的反斜杠
    \" 普通的双引号
    

数据类型—整数型

基本数据类型 占用空间大小【单位:字节】…默认值
byte 1 … 0
short 2 … 0
int 4 … 0
long 8 … 0
1.在java语言当中的“==整数型字面值”被默认当做int类型来处理。==
  • 要让这个“整数型字面值”被当成long类型来处理的话,需要再“整数型字面值”后面添加l/L,建议使用大写“L”;
2.java语言当中的整数型字面值有三种表示方式:
  1. 十进制【是一种缺省“默认”的方式】
  2. 八进制【在编写八进制整数型字面值的时候需要==以0开始==】

    int b = 010;
    
  3. 十六进制【在编写八进制整数型字面值的时候需要==以0x开始==】

    int b = 0x10;
    

  4. int转int

    //123这个整数型字面值int类型
    //i 变量声明的时候也是int类型
    //int类型的123给int类型的变量, 不存在类型转换
    int i = 123;
    System.out.println(i);
    
  5. long

    //456 整数型字面值被当做int类型,占用4个字节
    //x 变量在声明的时候是long类型,占用8个字节
    // int类型的字面值456赋值给long类型的变量x,存在类型转换
        
    //int类型是小容量
    //long类型是大容量
    //小容量可以自动转换成大容量,称为自动类型转换机制。
    long x = 456;
    --输出占用8个字节
    
==例子==
long s = 2147483647;
System.out.println(s); //打印输出2147483647

long i = 2147483648; //报错2147483648超出范围--被当成int类型处理
解决以上错误
//2147483648字面值一上来就被当成long类型来处理,在字面值后面添加 L;
//2147483648L是8个字节的long类型
//z是long类型变量,以下程序不存在类型转换
long z = 2147483648L;
System.out.println(z);



数据类型—浮点型

  • 关于浮点型类型:
  • - float 单精度【4个字节】
    • double 双精度【8个字节,精度较高】

      double 的精度太低【相对来说的】,不适合做财务软件。
      财务涉及到钱的问题,要求精度较高;
      所以SUN在基础SE类库当中,为了程序员准备了精确度更高的类型;
      只不过这种类型是一种引用数据类型;不属于基本数据类型,
      
      它是:java.math.BigDecimal
       
      

在java语言当中,所有的浮点型字面值【3.0】,默认被当成==double类型来处理==,
想要该字面值当做float类型来处理需要==在后面添加F/f==;

==ps:==

    double和float在计算机内部二进制存储的时候,存储的都是近似值。
    在现实世界当中有一些数字是无限循环小数,例如:3.333333333333...
    计算机的资源是有限的,用有限的资源存储无限的数据只能存储近似值;!!
    
 double d = 3.0;
 System.ouot.prinTln(d);
 

类型转换

基本数据类型之间的互相转换:转换规则; 1. 8种基本数据类型当中除boolean类型之外剩下的7种类型之间都可以相互转换

  1. ==小容量向大容量转换==,称为自动类型转换,容量从小到大排序

    • byte < short(char) < int < long < float < double
    • 任何浮点类型不管占用多少个字节,都比整数类型容量大;
    • char和short可以表示的种类数量相同,但是==char==可以取更大的正整数
  2. ==大容量转换成小容量==,叫做强制类型转换,需要加强制类型转换符,程序才能编译通过,但是在运行阶段可能会损失精度,所以谨慎使用

  3. 当整数字面值没有超过byte,short,char的取值范围时,可以直接赋值给byte,short,char类型的变量

  4. byte,short,char混合运算的时候,各自转换成int类型再做运算。

  5. 多种数据类型混合运算的时候,先转换成容量最大的那种类型再做运算


数据类型——boolean

在java语言当boolean类型只要两个值:==true, false==,没有其他值。(C语言中,0和1可以表示真和假)

在底层存储的时候boolean类型只占用1个字节,因为实际储存的时候==false底层是0,true底层是1。==

布尔类型实际开发当中非常重要,经常使用在逻辑运算和条件控制语句当中。


强转原理:

    //原始数据:00000000 00000000 00000000 00000000 00000000 00000000 00000000 01100100
    //强转之后的数据: 00000000 00000000 00000000 01100100
    //将左边的二进制砍掉【所有的数据强转的时候都是这样完成的】
    
    //例子:
    long x = 100L;
    int y = (int)x;
    System.out.println(y);