1. 类型是什么
所谓类型是指描述变量占据的空间大小。例如 byte类型 占据8bits空间
2. 知识补充-字节存储单位
描述字节大小的单位 计算机内部数据的最小单位是位 bit,也就是一根电线丝一次传输的电信号状态,我们用二进制数 0 或 1 来表示。如果把 8 根电线丝并排在一起,并行传输数据,则一次可以同时传输 8 种电信号状态,即 8 位二进制数(0 或 1)。在计算机中,把 8 位聚在一起的二进制数称为一个字节byte,即 1 字节(byte)= 8 位(bit)。
3. java类型分类
4. 基本数据类型
4.1 byte类型
4.1.1 定义
byte类型为java基本数据类型中的最小类型。byte: 8 (bit)
/**
* 测试byte类型最大、最小存储量
*/
public class ByteTest{
public static void main(String[] args) {
byte a = 120;
System.out.println("byte的最小值:" + Byte.MIN_VALUE);
System.out.println("byte的最大值:" + Byte.MAX_VALUE);
}
}
4.1.2 存储
4.1.3 补充: 进制问题
十进制: 由0,1,2,3,4,5,6,7,8,9十个数组成,逢十进一
二进制: 由0,1两个数组成,逢二进一
由0~9,A-F十六个数组成,逢十六进一
4.1.4 十进制转二进制
十进制转为二进制: 除2取余数
二进制转化为十进制: 每一位值(0或1)x2n-1
4.2 short类型
4.2.1 定义
短整型(short): 占2个字节;short : 2 x 8 = 16 (bit)
/**
* 测试short类型最大、最小存储量
*/
public class ShortTest {
public static void main(String[] args) {
short a = 129;
System.out.println("最小值:" + Short.MIN_VALUE);
System.out.println("最大值:" + Short.MAX_VALUE);
}
}
4.2.1 存储
最高位(第15位)0表示正数,1表示负数
4.2.2 面试相关
以下代码是否有错误?
-
short s1= 1;
-
s1 = s1 + 1;
4.3 char类型
4.3.1 定义
字符型(char): 占2个字节; char: 2 x 8 = 16 (bit)
4.3.2 存储
char类型存储正数,最高位0,1都表示正数,存储范围: 0 ~65535
4.3.3 使用单引号描述char类型
char ch = 'a'; //定义一个char类型ch, 存储字符 a
4.3.4 使用整数描述char类型
char ch = 97; //定义一个char类型ch, 存储字符 a
4.3.5 使用unicode描述
char ch = ''\u0061';
4.3.6 知识补充-ASCII码和Unicode
1. ASCII码
ASCII: American Standard Code for Information Interconnection(美国信息交换标准代码)
-
用一个字节(8位)来表示一个英文字符
-
字节的最高位统一规定位0
-
剩下7个位置存储数据
-
最大能表示128个字符(0~127数值)
2. unicode
3. 编码类型
- GB2312编码
1981年5月1日发布的简体中文汉字编码国家标准。GB2312对汉字采用双字节编码,收录7445个图形字符,其中包括6763个汉字。
- BIG码
台湾地区繁体中文标准字符集,采用双字节编码,共收录13053个中文字,1984年实施。
- GBK编码
1995年12月发布的汉字编码国家标准,是对GB2312编码的扩充,对汉字采用双字节编码。GBK字符集共收录21003个汉字,包含国家标准GB13000-1中的全部中日韩汉字,和BIG5编码中的所有汉字。
- Unicode编码
国际标准字符集,它将世界各种语言的每个字符定义一个唯一的编码,以满足跨语言、跨平台的文本信息转换。Unicode采用四个字节为每个字符编码。
- UTF-8和UTF-16编码
Unicode编码的转换格式,可变长编码,相对于Unicode更节省空间。UTF-16的字节序有大尾序(big-endian)和小尾序(little-endian)之别。
4.4 int类型
4.4.1 定义
整型:占4个字节 int: 4 x 8=32 (bit)
/**
* 测试int类型最大、最小存储量
*/
public class IntTest {
public static void main(String[] args) {
int x = 333333;
System.out.println("int的最小值:" + Integer.MIN_VALUE);
System.out.println("int的最大值:" + Integer.MAX_VALUE);
}
}
4.4.2 存储
最高位(第31位),0表示正数,1表示负数。
4.4.3 常量int类型
编译器默认整型常量(1, 11,333)为int类型
int x = 3; //编译器默认3为int类型
4.5 long类型
4.5.1 定义
长整型: 占8个字节 long: 8 x 8=32 (bit)
/**
* 测试long类型最大、最小存储量
*/
public class LongTest{
public static void main(String[] args) {
long x = 12345678910L; //常量默认int
System.out.println("long的最小值:" + Long.MIN_VALUE);
System.out.println("long的最大值:" + Long.MAX_VALUE);
}
}
4.5.2 存储
4.5.3 常量long类型
使用long类型常量要在常量末尾加L或l字母
final long size = 34L;
4.5.4 案例
注意运算过程中有可能超出类型的最大范围问题。
/**
* 计算一个100岁的人一共活了多少秒
*/
public class HowManySeconds{
public static void main(String[] args) {
int age = 100; //岁
int year = 365; //天
int day = 24; //时
int hour = 60; //分
int minus = 60; //秒
long total = 1L* age * year * day * hour * minus; //计算结果为int。使用1L升级为long型
System.out.println("100年有: " + total +"秒");
}
}
age * year * day * hour * minus;结果超出最大int的最大范围
编译器默认 1, 2,3333, in
4.6 float类型
4.6.1 定义
单精度: 占4个字节 float : 4 x 8=32 (bit)
4.6.2 常量的float类型
表示一个常量为float类型:
4.6.3 知识补充-浮点类型的计算机表示
1. 单精度表示
2. 双精度表示
4.7 double类型
4.7.1 定义
双精度: 占8个字节 double : 8 x 8=64 (bit)
4.7.2 问题扩展
double x = 3.000000001;
double y = 3.0000000011;
比较x和y谁的值大?
开发中不要使用浮点类型进行比较运算,结果可能出现问题
4.7.3 常量双精度
编译器默认带小数的类型为double类型;
1.1, 2.000 为double 型
double x = 3.001; // 常量3.001编译器默认为double类型
4.7.4 面试相关
- 以下程序运行是否有问题?
- 程序运行是否有问题?
4.8 boolean类型
4.8.1 定义
布尔型: 空间由不同的jvm定义
boolean f = true;
今天先到游荡这里了,预知后事如何,请关注:神奇的运算符。