数据类型的分类
java中的 变量 按照数据类型来分类:
- Java语言是 强 类型语言,对于每一种数据都给出了明确的数据类型,不同的数据类型也分配了不同的内存空间,所以它们表示的数据大小也是不一样的。
- 基本数据类型(4类8种)(primitive type):
- 整型:byte、short、int、long、
- 浮点型:float、double
- 字符型:char
- 布尔型:boolean
- 引用数据类型 (reference type):
- 类(class)(String)
- 数组(array) [ ]
- 接口(interface)
- 枚举(enum)
- 注解(annotation)
- 记录(record)
整型变量的使用说明
- java的整型常量默认为int型,声明long型常量需后加 ‘L’ 或 ‘l’
- java程序中变量通常声明为int型,除非不足以表示较大的数,才使用long
类型 占用存储空间(内存占用) 表数范围 Byte 1字节=8bit位() ( 位) ( ~ ) ( ~ ) (=256)(128+127=255,255加上中间一个0一共有256个数据) short 2字节() ( 位) ~(2*8-1)(-32768~32767)(3万2左右多) int 4个字节()( 位 ) ~(4*8-1)(约21亿)(10位数) long 8字节()( 位 ) ~(8*8-1)(19位数)
- 计算机中的最小存储单位:bit(每个0或1就是一个位)
- 计算机中基本存储单元:Byte(B)(是计算机用于计算存储容量的基本单位)
- 转换关系:
8 bit = 1 Byte
1024 Byte = 1KB
1024 KB = 1MB
1024 MB =1GB
1024 GB = 1TB
浮点型变量的使用说明
- float:单精度,尾数可以精确到7位有效数字。很多情况下,精度很难满足需求
- double:双精度,精度是float的两倍。通常采用此类型。
- 明摆着写上一个3.14,什么都没有, 只写上1个3.14 ,就会分不清楚到底是float还是double ,为了区分,浮点数当中默认类型是double 。如果 一定要使用float类型,需要加上一个后缀 ‘F’ 或 ‘f’ 。
- 浮点型可能只是一个近似值,并非精确的值。
- 随便写一个小数字面量默认是double类型。
说明:E + 38表示是乘以10的38次方,同样,E - 45表示乘以10的负45次方
类型 占用存储空间 表数范围 单精度float 4字节() 1.401298E-45 ~ 3.403E + 38 双精度double 8个字节() 4.9000000E-324 ~ 1.797693E + 308(乘以10的308次方)
关于浮点型精度的说明
- 并不是所有的小数都能可以精确的用二进制浮点数表示。二进制浮点数不能精确的表示0.1、0.01、0.001这样10的负次幂。
- 浮点类型float、double的数据不适合在不容许舍入误差的金融计算领域。如果需要精确数字计算或保留指定位数的精度,需要使用BigDecimal类。
为什么0.1 + 0.2不等于0.3 ? System.out.println(0.1 + 0.2);//0.30000000000000004
float ff1 = 123123123f; float ff2 = ff1 + 1; System.out.println(ff1);//1.2312312E8 System.out.println(ff2);//1.2312312E8 System.out.println(ff1 == ff2);//true
// 定义圆周率并赋值为3.14,现在3个圆的半径分别为 1.2,2.5,6,求它们的面积 double PI = 3.14; double radius1 = 1.2; double radius2 = 2.5; int radius3 = 6; double area1 = PI * radius1 * radius1; double area2 = PI * radius2 * radius2; double area3 = PI * radius3 * radius3; System.out.println(area1); System.out.println(area2); System.out.println(area3);
// 小明要到美国旅游,可是那里的温度以华氏度为单位记录的, // 它需要一个程序将华氏温度(80度)转换为摄氏度,并以华氏度和摄氏度为单位分别显示该温度。 double fahrenheit = 80; double centigrade = (fahrenheit - 32) / 1.8; System.out.println("华氏度" + fahrenheit);//华氏度80.0 System.out.println("摄氏度" + centigrade);//摄氏度26.666666666666664
字符类型
- char型数据用来表示通常意义上 “字符” (2字节)()(1个字符 = 2个字节)
- Java中的所有字符都使用Unicode编码,故一个字符可以存储一个字母,一个汉字,或其他书面语一个字符
- 0~65535 占用6万多个字符
转义字符 说明 Unicode表示方式 \b(backspace)
退格符 \u000a \n(line) 换行符 \u0009 \r(return) 回车符 \u0022 \t(table) 制表符 \u0027 \ '' 双引号 \u005c \ ' 单引号 \u0008 \\ 反斜 线
\u000d
- 字符串变量的三种表现形式:
- 字符常量是用单引号(‘ ’)括起来的单个字符。
- Java中还允许使用转义字符 ‘\’ 来将其后的字符转变为特殊字符常量。
- 直接使用 Unicode 值来表示字符型常量:‘\uXXXX’。其中,XXXX代表一个十六进制整数。如:\u000a表示 \n
char c = 97; System.out.println(c);//a
- char类型是可以进行运算的。因为它都对应有 Unicode 码。
布尔类型(boolean)变量的使用
- 只能取两个值之一:true、false
- 常常在条件判断、循环结构中使用
- 了解:我们不谈boolean类型占用的空间大小。但是,真正在内存中分配的话,使用的是4个字节()
注意事项:
- 数据范围与字节数不一定相关,例如float数据范围比long更加广泛,但是float是4个字节,long是8个字节。
- 整数和小数取值范围大小关系:double > float > long > int > short > Byte