javaSE05-数据类型

javaSE05-数据类型

1.变量

1.1 什么是变量?

  • 1.1.1 变量是程序的基本组成单位,变量的值是可以变化的,变量有三个基本组成单位:(变量类型 变量名称 变量值)。
int i = 10;// 定义了一个变量 变量名称为i,类型为int,值为10
int b = 3;// 定义了一个变量 变量名称为b,类型为int,值为3
b = 103;// 将103 赋值给变量b

  • 1.1.2 变量表示内存中的存储区域,不同的变量由于类型不同,他所占用的空间大小不同。
  • 1.1.3 该区域有自己的名称(变量名)和类型(变量类型)。
  • 1.1.4 变量必须先声明,后使用,即有顺序;该区域内的数据可以在同一范围内不断变化。
  • 1.1.5 变量在同一作用域(类)内不能同名。

1.2 变量使用的基本步骤

//1.声明变量  定义变量类型及名称
int a; 
//2.变量赋值 给定义好的变量赋值
a = 100;
//3.整合
int a = 100;

1.3 个人理解

  • ​ 变量即为在计算机内容中开辟一块空间,根据声明的变量类型的不同,所开辟空间的大小也不同。变量的赋值就是在所开辟的这块空间中填充入同类型的具体的值,这个值可以随需求更换。
  • ​ 所以声明变量类型的原因是确认开辟空间的大小?声明变量名称的原因是为了能够区分不同变量,方便引用?赋值的原因就是让空间中有具体的数值,从而让变量有实际意义?变量值的可变就是空间是固定的,但里面的数据可以随时更换。(房子是不变的,但房子里住的人是可变的?)

2.数据类型

​ Java是强类型语言,要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用。

在这里插入图片描述

​ Java的数据类型分为基本数据类型和引用数据类型。

2.1基本数据类型

​ 基本数据类型分为数值数据类型和boolean类型。

2.1.1 数值类型

(1)整数类型​

  • byte 占1个字节 范围:-128~127
	  byte num1 = 10;
  • ​short 占2个字节 范围:-32768~32767
	  short num2 = 20;
  • ​ int 占4个字节 范围:-2147483648~2147483647
	  int num3 = 30; //int为最常用类型
  • ​long 占8个字节 范围:-92233720036854775808~92233720036854775807
	  long num4 = 30l; //long类型声明时应在数值后面加L

(2)浮点类型

关于浮点数在机器中的存放形式,浮点数=符号位+指数位+尾数位。尾数部分可能丢失,会造成精度损失,所以浮点数都是近似值。

  • float 占4个字节 范围:-3.403E38~3.403E38
	  float num5 = 1.5f; //flaot类型声明时应在数值后面加F,	float为单精度类型浮点数
  • double 占8个字节 范围:-1.798E308~1.798E308
	  float num6 = 3.14159; //double为双精度类型浮点数

(3)字符类型

  • char 占2个字节

在这里插入图片描述
​ char为字符,与String字符串不同,String为类。

2.1.2 boolean类型

​ 占1位 且只有truefalse两个。

        //布尔值:是非
        boolean flag = true;
        //boolean flag = false;

2.2 引用数据类型(reference type)

  • ​ 类
  • ​ 接口
  • ​ 数组

3.浮点类型注意事项

  • ​ 3.1 与整数类型相似,Java的浮点类型也有固定的范围和长度,不受具体操作系统的影响。

  • ​ 3.2 Java的浮点类型默认为double形式。

  • ​ 3.3 浮点数常有两种表达形式:

    ​ 十进制表示:如 5.20 5.20f .520(0.520—必须有小数点)

    ​ 科学计数法表示:如5.20e2[5.20×10^2] 5.20e-2[5.20×10^-2]

  • 3.4 不要使用浮点数进行计算!!使用BigDecimal 数学工具类进行浮点数类型的计算。

    float f = 0.1f;  //0.1
    double d = 1.0/10; //0.1

    System.out.println(f==d); //false
    System.out.println(f); // 0.1
    System.out.println(d); // 0.1
	//不要使用浮点数进行计算!!使用BigDecimal 数学工具类进行浮点数类型的计算。

4.字符类型

  • ​ 4.1 字符类型可以表示单个字符,字符类型为char。字符常量为两个单引号括起来的一个字符(’ '),char的大小为两个字节,多个字符可以使用字符串表示。

在这里插入图片描述

  • ​ 4.2 所有的字符本质还是数字,是通过Unicode编码完成的,在输出是时Unicode码所对应的字符。
  • ​ 4.3 char类型是可以运算的,它的本质是一个数字,因为它都对应有Unicode码。
public class charDemo {
    public static void main(String[]args){
		char c1 = 'a';
        System.out.println('a'+10); //107
    }
}
  • ​ 4.4 可以直接给char赋值一个整数,他会输出Unicode码所对应的字符。
public class charDemo {
    public static void main(String[]args){
        char c1 = 'a';
        char c2 = '中';
        //所有的字符本质还是数字,是通过编码完成的。
        //Unicode编码 占有2个字节 (以前最多可以表示)65536个字符  0 - 65536  2^16
        //表:97 = a  65 = A
        //编码表中的表达方式 U0000 UFFFF 16进制
        System.out.println(c1); //a
        System.out.println((int)c1);  //强制转换 --->97
        System.out.println(c2);// 中
        System.out.println((int)c2);  //强制转换--->20013

        char c3 = '\u0061';  //16进制 反斜杠u 表示转义
        System.out.println(c3); //a
        
    }
}

  • 4.5字符型存储到计算机中,需要将字符所对应的码值(整数)找出来,比如’a’的存储与读取:
    存储:‘a’=====> 码值97 ======> 二进制(110 0001) =====>存储。

    读取:二进制(110 0001)======> 码值97 =====>‘a’ =====> 显示。

  • 4.6字符和码值的关系是通过字符编码表规定的,常用的字符变编码表有:

  • 4.6.1 ASCII

(ASCII编码表,由一个字节表示,一共有128个字符,实际上一个字节可以表示256个字符,只用了128个)。

  • 4.6.2 Unicode

(Unicode编码表 固定大小的编码,使用两个字节来表示字符,字母和汉字统一都是占用两个字节,这样比较浪费空间) 最大可表示的字符数为2^16 = 65536个。

Unicode码兼容ASCII码!!

  • ​ 4.6.2 UTF-8

(编码表,大小可变的编码,字母使用一个字节,汉字使用三个字节)充分利用空间,表示范围广。

  • 4.6.3 GBK

  • (可以表示汉字,而且范围很广,字母使用一个字节,汉字使用两个字节。没有utf-8表示的汉字多)。

  • 4.6.4 gbk2312(可以表示汉字,gbk2312<gbk)。

  • 4.6.5 big5码(繁体中文,台湾、香港)。

5.布尔类型

  • ​ 5.1 boolean类型一般适用于逻辑运算,一般用于程序流程控制。
  • ​ 5.2 布尔类型也叫做boolean类型,boolean类型数据只允许取值true和false,无null。
  • ​ 5.3 boolean类型只占用一个字节。
  • ​ 5.4 java中不可以用0或者非0的整数代替true或者false,这点与其他编程语言不同。

6.整数类型(进制)

​ 对于整数有四种表达方式,分别为二进制、十进制、八进制、十六进制。

6.1 二进制

​ 由0,1表示,满2进1,以0b或者0B开头。

6.2 十进制

​ 由0-9表示,满10进1。

6.3 八进制

​ 由0-8表示,满8进1,以数字0开头表示。

6.4 十六进制

​ 由0-9及A(10)-F(15)表示,满16进1,以0x或者0X开头表示。此处A-F不区分大小写。

public class Demo {
    public static void main(String[]args){
        //整数拓展: 进制    二进制 0b     十进制    八进制0      十六进制0x
        int i1 = 10; //十进制
        int i2 = 0b1010; //二进制0b
        int i3 = 010; //八进制0
        int i4 = 0x10; //十六进制0x   0~9 A~F  16
        }
}

6.5 进制图示

二进制(0b)八进制(0)十进制十六进制(0x)
0000
1111
10222
11333
100444
101555
110666
111777
10001088
10011199
10101210A
10111311B
11001412C
11011513D
11101614E
11111715F
10000201610
10001211711

6.6 进制的转换

6.6.1 二进制转十进制

规则:从最低位(右边)开始,将每个位上的数提取出来,乘以2的(位数-1)次方,然后求和。

​ 例:0b1011 = 1*2(1-1)+1*2(2-1)+0*2(3-1)+1*2(4-1)=1+2+0+8=11

6.6.2 八进制转十进制

规则:从最低位(右边)开始,将每个位上的数提取出来,乘以8的(位数-1)次方,然后求和。

​ 例:0234 = 4*8(1-1)+3*8(2-1)+2*8^(3-1)=4+24+128=156

6.6.3 十六进制转十进制

**​ 规则:从最低位(右边)开始,将每个位上的数提取出来,乘以16的(位数-1)次方,然后求和。

​ 例:0x23A = 10*16(1-1)+3*16(2-1)+2*16^(3-1)=10+48+512=570

6.6.4 十进制转二进制

规则: 将该数不断除以2,直到除至商为0为止,然后将每步得到的余数倒过来,就是对应的二进制。(反转取余)

​ 例:34 = 0b00100010

​ 34/2 = 17 … 0

​ 17/2 = 8 … 1

​ 8/2 = 4 … 0

​ 4/2 = 2 … 0

​ 2/2 = 1 … 0

​ 1/2 = 0 … 1

​ 将余数自下向上倒取,则为二进制表达结果:0b100010,补足字节为:0b00100010。

6.6.5 十进制转八进制

规则: 将该数不断除以8,直到除至商为0为止,然后将每步得到的余数倒过来,就是对应的八进制。(反转取余)

​ 例:131 = 0203

​ 131/8 = 16… 3

​ 16/8 = 2 … 0

​ 2/8 = 0 … 2

​ 将余数自下向上倒取,则为八进制表达结果:0203。

6.6.6 十进制转十六进制

规则: 将该数不断除以16,直到除至商为0为止,然后将每步得到的余数倒过来,就是对应的十六进制。(反转取余)

​ 例:237 = 0XED

​ 237/16 = 14… 13(D)

​ 14/16 = 0 … 14(E)

​ 将余数自下向上倒取,则为十六进制表达结果:0XED。

6.6.7 二进制转八进制

规则:低位(右边)开始,二进制数每三位一组,转成对应的八进制数即可。(先转换为十进制,然后转换为其他进制)

​ 例:0b11010101 = 0325

​ 101 => 5

​ 010 => 2

​ 11 => 3

​ 自下向上倒取,则为八进制表达结果:0325。

6.6.8 二进制转十六进制

规则:低位(右边)开始二进制数每四位一组,转成对应的十六进制数即可。(先转换为十进制,然后转换为其他进制)

​ 例:0b11010101 = 0203

​ 0101 => 5

​ 1101 => 13(D)

​ 自下向上倒取,则为十六进制表达结果:0XD5。

6.6.9 八进制转二进制

规则:八进制每一位数转换为一个二进制的三位数即可。(先转换为十进制,然后转换为其他进制)

​ 例:0237 = 0b10011111

​ 7 => 111

​ 3 => 011

​ 2 => 010

​ 自下向上倒取,则为二进制表达结果:0b010011111,补全字节为0b10011111。

6.6.10 十六进制转二进制

规则:十六进制每一位数转换为一个二进制的四位数即可。(先转换为十进制,然后转换为其他进制)

​ 例:0X23B = 0x001000111011

​ B => 1011

​ 3 => 0011

​ 2 => 0010

​ 自下向上倒取,则为二进制表达结果: 0x001000111011。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值