汇总:Android小白成长之路_知识体系汇总【持续更新中…】
- 数据类型
- 整型
- 浮点类型
- char类型
- boolean类型
- 运算符
- 常用数学函数和常量
- 数值类型转换
- 位运算
- 字符串
- 控制流程
- 大数值
- 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:2字节,占16位,取值范围为0~216-1
- char类型原本用于表示单个字符,但现在有些Unicode字符可以用一个char值描述,而灵位一些Unicode字符则需要两个char值,也就是一些延伸出来的特殊字符转义序列
- 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等方法



