目录
- 变量介绍
- +号使用
- 数据类型(重点)
- 编码
- 数据类型转换
java中“+”的使用
- 两边都是数值类型,做加法运算
- 其中一方是字符串,做拼接运算
java中的数据类型
每一种数据都定义了明确的数据类型,在内存中分配了不同大小的内存空间。
基本数据类型
-
数值型 整数类型:byte(1), short(2), int(4), long(8) 浮点(小数)类型:float(4), double(8)
-
字符型:char(2),存放单个字符
-
布尔型:boolean(1),存放true,false
引用类型
- 类(class)
- 接口(interface)
- 数组 []
eg:String是引用类型
基本数据类型:一共有八种
整数类型详解
- java整形常量默认为int类型,声明long类型需要常量后面加“l”
int n1 = 1 // 4字节
long n2 = 1l // 8字节
浮点类型
浮点数的注意:
- 浮点数在计算机中存放形式:浮点数 = 符号位 + 指数位 + 尾数位
- 尾数部分可能丢失,造成精度损失(小数都是近似值)
- 浮点常量默认是double类型,声明float类型,需要在后面加f
- 不知精度的情况通常使用double类型
float num1 = 1.1 // 错误
float num2 = 1.1l // 正确
double num3 = 1.1 // 对
double num3 = 1.1l // 对
float num1 = 2.7
float num2 = 8.1 / 3
System.out.println(num1) // 2.7
System.out.println(num1) // 2.69999999999近似值,不是2.7
double num3 = 1.1l // 对
注意:当我们对计算出来的结果(直接赋值的不会)是小数的值进行比较或者相等判断时候,要非常小心,应该比两个数据的差值在某个范围内。
// 错误的写法
if (num1 == num2) {
System.out.println("相等")
}
// 正确的写法
if (Math.abs( num1 - num2) < 0.000001) {
System.out.println("相等")
}
字符类型char
字符的本质,它的底层,对应的是一个具体的数字
字符类型细节
- 用单引号,不能用双引号,双引号是表示字符串类型String。
- 在java中,char的本质是一个整数,在输出时,是unicode码对应的字符
- 可以给char赋值一个整数,然后在输出的时候,会按照Unicode对应的字符输出
- char类型是可以运算的,因为它有对应的Unicode
char c1 = 97
System.out.println(c1) // 'a'
char c2 = 'a'
System.out.println(c2) // 'a'
// char 类型可以运算
System.out.println('a' + 10) // 107
字符类型的本质讨论
- 不同的编码会造成文件大小不一样
- ASCII:一共128个字符,每个字符1个字节
- utf-8:大小可变的编码,字母用一个字节,汉字用3个字节
- Unicode:固定编码大小,字母和汉字都是2个字节,Unicode兼容ASCII编码
布尔类型
基本数据类型转换
java程序在运算或赋值时,精度小的会自动转换成精度较大的数据类型,这个就是自动数据类型转换。
下面一张图要背下
int a = 'a' // 对 char -> int
double b = 10 // 对 int -> double
自动类型转换细节
- 多种数据混合运算,系统会把所有数据转换成容量(精度)最大的那种数据,在进行运算
- 当我们把容量(精度)大的数据类型转换成精度小的数据类型时,会报错,反之不会。
- byte,short这两个,不能和char互相转换
- byte,short,char这三者可以计算,他们会把自己都先转成int类型再计算(哪怕其中只有一种数据类型)
- boolean不参与转换
byte b1 = 10 // 对,在byte范围内就可以-128`127
int a = 10
byte c = a // 错, 因为a占了4个字节
char d = b1 // 错
byte a1 = 1
short s1 = 1
short s2 = a1 + s1 // 错 因为a1 + s1已经变成int类型了
boolean a2 = true
int a3 = a2 // 错
强制类型转换
强制转换符号只针对最近的数有效
char c1 = 1 // ok
int m = 100
char c2 = m // fail
char c3 = (char)m // ok
String和基本类型转换
- 基本数据类型转化为字符串,加一个
""就行 - String转换成基本数据类型:通过基本类型包装类调用parseXX方法即可,在java里面,每一个基本数据类型都对应了一个包装类。
int n1 = Interger.parseInt("123")
double n2 Double.parseDouble("132")
boolean n3 = Boolean.parseBoolean("true")
...
- 怎么把字符串转换成字符char:这句话的意思是:获取这个字符串的第一个字符。因为char只能显示一个字符
java类的组织形式