一、数据类型
1、数据类型
数据类型用来声明变量,程序在运行过程中根据不同的数据类型分配不同大小的空间。int i = 10;
double d = 1.23;
// i变量和d变量类型不同,空间大小不同。
2、两种数据类型
- 基本数据类型
- 引用数据类型
3、基本数据类型之间的区别
整数型:byte short int long有什么区别?浮点型:float和double有什么区别?
区别:占用的空间大小不同。 1)占用字节数量 byte 1字节 short 2字节 int 4字节 long 8字节 float 4字节 double 8字节 boolean 1字节 char 2字节
4、各个类型的取值范围
(1个字节)byte: [-128 ~ 127](2个字节)short:[-32768 ~ 32767] 可以表示65536个不同的数字
(4个字节)int: [-2147483648 ~ 2147483647]
(2个字节)char: [0~65535] 可以表示65536个不同的数字 对于short和char来说:short和char实际上容量相同,因为char表示的是文字,文件没有正负之分,所以char可以表示更大的数字。
5、各个数据类型默认值
byte 0
short 0
int 0
long 0L
float 0.0f
double 0.0
booleam flase
char \u0000
引用数据类型 null
二、基本数据类型详解
- 字符型 char
- 整数型 byte short int long
- 浮点型 float double
- 布尔型 boolean
1)char类型
/*
char类型
char占用两个字节,取值范围0-65535,采用unicode编码
char类型字面量用单引号
*/
public class CharTest01{
public static void main(String[] args){
// char可以存储一个汉字,汉字占用两个字节
char c1 = 'z';
// 编译报错
char c2 = "a";
// 错误 只能有一个字符
char c3 = 'ab';
}
}
转义字符 “\”
// 转义字符 “\”
public class CharTest01{
public static void main(String[] args){
char c1 = '\t';// \t 表示制表符tab
char c2 = '\n';// \n 表示换行符
System.out.print('\\'); // 输出字符 \斜杠
System.out.print('\''); // 输出字符 '单引号
System.out.print('\"'); // 输出字符 "双引号
System.out.print("'zhe'");
System.out.print('\u4e2d'); // \u表示后面是一个unicode编码 输出 中
}
}
2)整数类型
/*
整数类型
byte 1字节、short 2字节、int 4字节、long 8字节
最常用的是int类型,int类型 最大值是2147483647,超过这个值可以使用long
*/
/*
整数型字面量有4中表示形式
十进制:常用 二进制 八进制 十六进制
*/
public class CharTest02{
public static void main(String[] args){
// 十进制
int a = 10;
// 八进制
int b = 010; // 0开头
System.out.println(b); // 8
// 十六进制
int c = 0x10; // 0x开头
// 二进制
int d = 0b10; // 0b开头
}
}
在java中,任何情况下,整数型的字面量默认被当作int类型处理,如果需要将该整数型字面量当long类型处理,需要在后面加L/l
类型转换
自动类型转换和强制类型转换
/*
自动类型转换
小容量可以自动转换成大容量
*/
public class CharTest03{
public static void main(String[] args){
int a = 100;// a占4字节
long b = 200;// b占8字节,但是默认整数型字面量被当作int类型处理,小的自动转换成大的
// 这个不存在类型转换,因为L为long类型,long类型赋值给long
long c = 300L;
// 整数型字面量默认为int类型,但是d超过int类型范围,所以还没有赋值的时候就出错了
// 整数太大
long d = 2147483648;
long d = 2147483648L;
}
}
/*
强制类型转换
大容量不能直接赋值给小容量,需要强制类型转换符进行强制转换
注意:强制类型转换之后可能会损失精度
*/
public class CharTest04{
public static void main(String[] args){
long x = 100L;
// 大容量不能直接赋值给小容量
// int y = x;
int y = (int)x;//(int)强制类型转换符
}
}
注意:语法规则
当一个整数没有超过byte,short,char的取值范围的时候,这个整数可以直接赋值给byte,short,char类型的变量public class CharTest05{
public static void main(String[] args){
// 错误
// byte b = 300;
byte b = (byte)300;// 会损失精度
// 按照道理说应该编译报错,但是没有报错
byte c = 1;
// 注意:语法规则:当整数型字面量没有超过byte的取值范围,那么可以直接赋值给byte
short d = 32767;
// 注意:语法规则:当整数型字面量没有超过short的取值范围,那么可以直接赋值给short
// 没有报错
char c1 = 97; // a
// 当一个整数赋值给char类型变量,会自动转换成char字符型
// char类型取值范围:0-65535
char c2 = 65536; // 超过范围 会报错
char c2 = (char)65536; // 强制转换 // 解决问题
}
}
注意:多种数据类型做混合运算的时候,最终的结果类型是“最大容量”对应的类型
但是 char + short + byte除外,因为他们三个在混合运算的时候,会各自先转换成int再做运算
// byte char short混合运算
public class IntTest01{
public static void main(String[] args){
char c1 = 'a';
byte b = 1;
System.out.println(c1 + b); // 98
// 编译器不知道运算结果,只知道c1 + b类型是int,所以需要强制类型转换
short s = (short)(c1 + b);
long a = 10L;
char c = 'a';
short s = 100;
int i = 30;
System.out.println(a + c + s + i);// 237
int x = a + c + s + i;// 报错,从long转换到int可能会损失
// java中规定int类型与int类型运算结果还是int类型,
int temp = 10 / 3; // 3 最终取整
// java中计算结果不一定是准确的
int temp2 = 1 / 2; // 0
}
}
3)浮点型
浮点型包括:float 4字节,double 8字节
float是单精度,double是双精度
注意:在银行或者财务方面,double也远远不够,java提供了精度更高的类型,java.math.BigDecimal(属于引用数据类型)
float和double存储数据的死后都是存储的近似值,因为有无线循环小数
注意:任意一个浮点型都比整数空间大,因为浮点型里面还有次幂啥的
规定:任何一个浮点数数据默认被当作double来处理,如果想要把浮点数字面量当作folat类型来处理,那么在后面加上F/f
public class FloatTest01{
public static void main(String[] args){
float f = 3.14;// 错误:从double转换到float可能会有损失
float f = 3.14F;
float f = (float)3.14;
int i = 10.0 / 5; // 错误:结果是double 大容量无法赋值给小容量
int i = (int)10.0 / 5;
int i = (int)(10.0 / 5);
}
}
4)布尔型
/*
boolean类型只有两个只 true false
通常在逻辑判断中使用,放在条件位置
*/
public class BooleanTest01{
public static void main(String[] args){
boolean sex = true;
if(sex){
System.out.println("man");
}else{
System.out.println("woman");
}
System.out.println(10 > 20);// false
}
}
总结:基本数据类型转换规则
- 八种基本数据类型中,除boolean 类型不能转换,剩下七种类型之间都可以进行转换
- 如果整数型字面量没有超出byte , short , char的取值范围,可以直按将其赋值给byte, short, char类型的变量
- 小容量向大容量转换称为白动类型转换,容量从小到大的撸序为: byto < short (char) <int < long < float < double, 其中
- shor和 char都占用两个字节,但是char可以表示更大的正整数
- 大容量转换成小容量,称为强制类型转换,编写时必须添加"强制类型转换符",但运行时可能出现精度损失
- byte, short, char类型混合运算时,先各白转换成int 类型再做运算
- 多种数据类型混合运算,各自先转换成容量最大的那一种再做运算
标签:short,字节,--,数据类型,char,int,JavaSE,byte From: https://www.cnblogs.com/hyy-0/p/17605957.html