汇总:Android小白成长之路_知识体系汇总【持续更新中…】
数据类型
- java中一共有
8
种基本数据类型,分为4
种整型、2
种浮点类型、1
种用于表示Unicode
编码的字符类型,和一种表示真值的布尔类型
整型
- int:
4
字节,占32
位,取值范围为-231~231-1 - short:
2
字节,占16
位,取值范围为-215~215-1 - long:
8
字节,占64
位,取值范围为-263~263-1 - byte:
1
字节,占8
位,取值范围为-27~27-1 - long型后缀
L
或l
,十六进制数值前缀0x
或0X
,八进制前缀0
,二进制前缀0b
或0B
浮点类型
- float:
4
字节,占32
位,取值范围为-231~231-1,有效位数为6~7
位 - double:
8
字节,占64
位,取值范围为-263~263-1,有效位数为15
位 float
类型后缀F
或f
,没有后缀的浮点数值默认为double
类型,double
后缀为D
或d
- 浮点数值计算会有误差,例如
2.0-1.1=0.8999999999999999
,而不是0.9
,因为浮点数值采用二进制系统表示,而二进制系统中无法精确地表示分数1/10
,就好像十进制无法精确地表示分数1/3
一样。如果不允许任何舍入误差,应该使用BigDecimal
类
char类型
- char:
2
字节,占16
位,取值范围为0~216-1 - char类型原本用于表示单个字符,但现在有些
Unicode
字符可以用一个char
值描述,而灵位一些Unicode
字符则需要两个char
值,也就是一些延伸出来的特殊字符转义序列
boolean类型
- boolean:
1
字节,占8
位,取值范围为true|false
- 在某些语言(例如C++)中,
0
和1
可以分别代表false
和true
,但是在java中不能这样做,会导致编译不通过
运算符
- 当参与除法运算的两个操作数都是整数时,表示整数触发,否则,表示浮点除法
- 整数被0除将会产生异常,而浮点数被0除将会得到无穷大或
NaN
结果
常用数学函数和常量
- java中有各种各样的数学函数,包含在Math类里
- 平方根:
Math.sqrt(a)
- 幂运算:
Math.pow(x,a)
,表示x的a次幂 - 常用的三角函数:
Math.sin、Math.cos、Math.tan、Math.atan、Math.atan2
- π:
Math.PI
数值类型转换
- 当两个操作数进行二元运算时:
- 如果两个操作数中有一个是
double
类型,则另一个操作数就会转换成double
类型 - 否则如果其中一个操作数是
float
类型,另一个操作数也将会转换成float
类型 - 否则如果其中一个操作数是
long
类型,另一个操作数将会转换成为long
类型 - 否则两个操作数都将被转换成
int
类型
- 如果两个操作数中有一个是
- 部分情况下转换类型会丢失精度,这些情况下需要强制转换才能转换。例如浮点型转整型会丢失小数位,如果想得到更接近的值,应该使用
Math.round()
- 如果强转类型时结果超出了目标类型的表示范围,结果就会被截断成一个完全不同的值
位运算
- 位运算符:与(&)或(|)非(~)异或(^)左移(<<)右移(>>)无符号右移(>>>)
- 无符号右移会用0补充高位,而右移会用符号位填充高位
- 不存在无符号左移运算符
字符串
- 获取子串:
String.substring(a,b)
,从a到b的索引截取出一段子串,索引位置包括a但不包括b - 判断相等:
String.equals()
,不区分大小写判断相等:String.equalsIgnoreCase()
,不要用==
来判断字符串相等,因为这个运算符只能判断两个字符串的地址是否一致,如果字符串内容相同,但被复制到不同的位置上,就会导致不相等。实际上,只有字符串常量是共享的,因此可以用==
来判断,但不建议这样用,避免使用不当出现bug - 空串和null串:空串是长度为0的字符串,表示为”“,String变量还有一个特殊的值null,表示目前没有任何对象与该变量关联
- 获取字符:
String,charAt(a)
,获取字符串在a索引上的字符 - 判断字符串:
String.compareTo(a)
,按照字典顺序,如果字符串位于a之前,则返回负数,如果字符串位于a之后,返回正数,如果字符串相等,返回0 - 判断前后缀:
String.startsWith(a)、String.endsWith(a)
,判断字符串前缀和后缀是否是a - 判断子串首次出现位置:
String.indexOf(a)
,判断子串a首次出现的开始位置,如果不存在则返回-1 - 判断子串最后出现位置:
String.lastindexOf(a)
,判断子串a最后出现的开始位置,如果不存在则返回-1 - 替换子串:
String.replace(a,b)
,用子串a替换所有b子串,返回新的字符串 - 删除头尾空格:
String.trim()
,删除字符串头部和尾部的空格 - 构建字符串:
- 采用字符串连接(
"+"
)的方法构建字符串每次会构建一个新的String
对象,既耗时,又浪费空间 - 使用
StringBuilder
构建字符串,速度快,但线程不安全,因此适合于单线程情况 - 使用
StringBuffer
构建字符串,比StringBuilder
速度稍慢,但线程安全,适用于多线程情况 StringBuffer
线程安全的原因:StringBuffer
源码里很多方法都被关键词synchronized
修饰
- 采用字符串连接(
控制流程
-
在循环中,检测两个浮点数是否相等需要格外消息,例如下面的for循环:
for (double x = 0;x != 10; x += 0.1) ...
可能永远不会结束,因为舍入有误差,最终可能得不到精确值,0.1无法精确地用二进制表示,所以 x 可能永远无法等于10
-
Switch-case
语句的case
标签类型可以是:- 类型类
char、byte、short
或int
的常量表达式 - 枚举类型
- 从
java SE 7
开始,还可以是字符串字面量
- 类型类
大数值
BigInteger
和BigDecimal
类包含在Math包中,用于处理任意长度数字序列的数值,BigInteger
实现了任意精度的整数运算,BigDecimal
实现了任意精度的浮点数运算- 使用这两个类静态的
valueOf
方法可以将普通的数值转换为大数值,不能使用算术运算符处理大数值,只能使用大数值类中的add
和multiply
等方法