欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

四、数据类型

程序员文章站 2024-03-14 17:05:34
...

1.Java的数据存储规范

  Java是强类型语言:要求数据的类型与数据的值严格保持一致

2.Java的数据类型分类(两大类)

 1.简单类型/基本类型/原始类型

   ①整数类型

数据类型 字节数 可表示的数据范围(二进制) 可表示的数据范围(十进制)
byte 1B -2 7~27-1 -128~127
short 2B -215~215-1 -32768~32767
int 4B -231~231-1 -2147483648~2147483647
long 8B -263~263-1 -9223372036854775808~9223372036854775807

   提示:

    一个字节在二进制占8位;表示数据的时候,第一位为符号位,0代表正数,1代表负数。

   ②小数/浮点数类型

数据类型 字节数 负数取值范围(十进制) 整数取值范围(十进制) 精度
float 4B -3.4E+38~1.4E-45 1.4E-45~3.4E+38 7位
double 8B -1.7E+308~4.9E-324 4.9E-324~1.7E+308 15位

   提示:

    -3.4E+38表示为-3.4乘以10的38次方分之一

   ③字符类型

数据类型 字节数 取值范围(无符号数) 字符编码
char 2B 0 ~ 65535 Unicode(万国码)

   字符表示的三种方式:

    Ⅰ.使用单引号引起来表示一个字符。如:‘a’,'b’等

    Ⅱ.使用整数表示一个字符。如:char A=64,char a=96

    Ⅲ.使用unicode去表示一个字符。如:char c = ‘\u0041’; 字符的默认值

   常见的ASCII码:

    ‘a’ 97

    ‘A’ 65

    ‘0’ 48

   转义字符:

\t 水平跳格
\n 换行
\’ 单引号
\" 双引号
\\ 反斜杠

   ④布尔类型

数据类型 字节数 取值范围
boolean 1B true/false

   注意:

    1. 整数默认是int类型

    2. 浮点数默认是double类型

    3. 长整型后缀用L或者l标记,建议用使用L(在定义数据类型,给的初始化值如果是整数,默认初始化值是int类型、小数默认是double,但是如果初始化值小于int类型数值范围,不加L也可以。但是建议加L,以便区分)

    4. 单精度浮点数用F或者f标记。建议使用F(如果不加,会报错;因为初始化值是double类型,而a是float类型,从double转换到float可能会有损失)

    5. float类型使用科学计数法储存的,可存储的范围过大,但是不够精确,小数点之后7位是精确的。

    6. double类型使用科学计数法存储的,可存储的范围过大,但是不够精确,小数点之后15位是精确的,16位是否精确还不确定。

 2.引用类型/对象类型

   类、字符串、接口、数组等等,除了八种基本数据类型之外其他都是引用类型/对象类型

3.数据类型转换

 1.默认转换(自动类型提升)

   默认转换就是从小到大的转换

   条件

    ①两种数据之间必须能够相互兼容

    ②目标数据类型比源数据类型大

   规则

    byte–>short–>int–>long–>float–>double

    byte,short,char相互之间不能转换,它们参与运算首先转换为int类型

   不同数据类型变量参与运算图解

四、数据类型

 2.强制类型转换

   强制类型转换就是从大到小的转换

   条件

    ①两种数据之间必须相互兼容

    ②目标数据类型比源数据类型小

   语法

    目标数据类型 变量名 = (目标数据类型)源数据变量名/源数据值;

   注意

    Ⅰ.整数的长度相互匹配,直接赋值,数据是完整的

    Ⅱ.整数的长度不匹配,数据截断,舍弃高位

    Ⅲ.浮点数转整数,数据截断,舍弃小数位

    Ⅳ.布尔类型数据不参与转换

    Ⅴ.不要随意去使用强制类型转换,因为它隐含了精度损失问题

 3.数据类型参与运算规则

   进行算数运算时:

    两个操作数有一个为double,计算结果提升为double。

    如果操作数中没有double,有一个为float,计算结果提升为float。

    如果操作数中没有float,有一个long,计算结果提升为long。

    如果操作数中没有long,有一个为int,计算结果提升为int。

    如果操作数中没有int,均为short或byte,计算结果仍旧提升为int。

   特殊:任何类型与String相加(+)时,实为拼接,其结果自动提升为String。

4.数据类型中补充的几个小问题

  1.byte,short在定义的时候,他们接受的其实是一个int类型的值,这个是自己做了一个数据检查的,如果不在它们的范围内,就报错

   2、byte值的问题
	byte b1 = 127;
	byte b2 = (byte)128;//-128
	byte b3 = (byte)129; //-127
	byte b3 = (byte)130; //-126
	
	byte的范围:-128 ~ 127
	
	128:10000000
	-128:10000000(这里的1即是符号位。也是数值位)

 3.数据类型转换之默认转换

	byte,short,char -- int -- long -- float -- double
	
	long:8个字节
	float:4个字节
	
	A:它们底层的存储结构不同
	B:float表示的数据范围比long的范围更大
	long:2^63-1
	float:3.4*10^38 > 2*10^38>2*8^38 = 2*2^3^38 = 2*2^114>2^63-1

 4.Java语言中的字符char可以存储一个中文汉字吗?为什么呢?

可以。因为Java语言中的字符占用两个字节;Java语言采用的是Unicode编码
相关标签: JavaSE笔记