1、数据类型
各个数据类型占用的空间:
数据类型 | 占用空间(字节) |
---|---|
byte | 1 |
short | 2 |
int | 4 |
long | 8 |
float | 4 |
double | 8 |
boolean | 1 |
char | 2 |
为什么要有基本数据类型呢?基本数据类型可以不采用new的方式创建,因为它们比较常用,直接赋值方式可以存储于栈中,更加高效
2、变量的声明
语法:
数据类型 变量名;
数据类型 变量名 = 变量值;
复制代码
示例:
public class VarType {
public static void main(String[] args) {
//记录人的信息
int age = 30;
double score = 88.9;
char gender = '男';
String name = "king";
//输出信息, 快捷键
System.out.println("人的信息如下:");
System.out.println(name);
System.out.println(age);
System.out.println(score);
System.out.println(gender);
}
}
复制代码
当变量后面初始化时有"+"号时:
- System.out.println("100" + 90); //10090
- System.out.println(90 + 10 + 90); //190
- System.out.println(90 + 20 + "90"); //11090
3、数据类型详解
不都介绍了,只介绍几个。
3.1 整型
byte和short主要用于操作底层文件,比如读取或者写入文件。
Java相较于C和C++的一点优势是,整型有固定的范围和字段长度,不受具体的操作系统的影响,可移植性强。
Java中Long类型需要加"l"或者"L",否则报错。
bit是计算机的最小存储单位,1byte=8bit。
Java7之后,整型值中间可以加"_"符号,JVM会在编译的时候帮我们去掉。
//Java7之后可以使用下划线表示
int i2 = 4_000_0000;
System.out.println(i2);
复制代码
3.2 浮点型
浮点数 = 符号位+指数位+尾数位
浮点类型容易丢失精度,如果实际业务中使用int精度不满足要求时可以使用BigInteger,同理double/float不足精度时,可以使用BigDecimal。
float类型后面需要加上"f",否则会被认为是double类型的。
浮点类型有两种表示方式,一种直接表示,一种是科学计数法:
float f1 = 5.1f;
float f2 = 1.5e-3f;
System.out.println(f2);
复制代码
很多时候小数除法在计算机不等于它的计算值,比如2.7不等于8.1/3,这是因为二进制表示精度的问题。可以使用Math类的方法计算。
public class DataType01 {
public static void main(String[] args){
System.out.println(8.1/3 == 2.7); //false
//如果两个值的差值趋近于无穷小,就认为是相等的
if (Math.abs(8.1/3 - 2.7) < 0.0000000001){ //true
System.out.println(true);
}else {
System.out.println(false);
}
}
}
复制代码
3.3 字符类型
也就是char类型,char类型可以是一个换行符,也可以是一个整数,比如
public class DataType01 {
public static void main(String[] args){
char c1 = 97;
char c2 = 'a';
char c3 = '\t';
System.out.println(c1);
System.out.println(c2);
System.out.println(c3);
}
}
复制代码
甚至char类型还能进行计算:
public class DataType01 {
public static void main(String[] args){
char c1 = 'b';
c1++;
System.out.println(c1); //c
}
}
复制代码
4、常见字符编码表
计算机中储存的信息都是用二进制数表示的;而我们在屏幕上看到的英文、汉字等字符是二进制数转换之后的结果。通俗的说,按照何种规则将字符存储在计算机中,如'a'用什么表示,称为"编码";反之,将存储在计算机中的二进制数解析显示出来,称为"解码",如同密码学中的加密和解密。在解码过程中,如果使用了错误的解码规则,则导致'a'解析成'b'或者乱码。
-
ASCII字符编码:主要包括控制字符(回车键、退格、换行键等);可显示字符(英文大小写字符、阿拉伯数字和西文符号)。
ASCII编码:将ASCII字符集转换为计算机可以接受的数字系统的数的规则。使用7位(bits)表示一个字符,共128字符;但是7位编码的字符集只能支持128个字符,为了表示更多的欧洲常用字符对ASCII进行了扩展,ASCII扩展字符集使用8位(bits)表示一个字符,共256字符。
-
Unicode字符编码:包含了非常多的字符,每个字符的编码都不同,所以不会有乱码问题。一个英文字母和汉字都占用2个字节,可能会存在冗余。
-
UTF-8字符编码:是一种针对Unicode的可变长度字符编码(定长码),也是一种前缀码。它可以用来表示Unicode标准中的任何字符,且其编码中的第一个字节仍与ASCII兼容,现在使用最广泛。字母占1个字节,汉字占3个字节。
5、基本数据类型转换
自动类型转换
细节:
- 多种类型数据计算的时候,会把它们先转换成类型最大的那个
- byte、short和char之间不会进行自动类型转换
- byte、short、char类型之间可以进行计算,但先要转成int类型
- 自动提升原则:计算后,结果转成类型最大的那个
强制类型转换
将容量大的数据类型转换为容量小的数据类型。使用时要加上强制转换符 ( ),但可能造成 精度降低或溢出,格外要注意。
细节:
- 强转符号只针对最近的操作数有效,所以一般会在后面数据操作加上括号
- char类型可以保存int类型的值,但如果保存int类型的变量需要强转
数据类型和String类型转换
//基本类型转String
String s1 = 某基本数据类型的值 + "";
//String转基本数据类型,调用基本数据类型包装类.parse方法即可,如下:
int i1 = Integer.parseInt("123");
//注意String类型不能用这种方式转char类型,因为字符串包含多个字符,可以使用charAt方法
char c1 = s1.charAt(index);
复制代码