Java关键知识点之基础部分

汇总:Android小白成长之路_知识体系汇总【持续更新中…】

数据类型

  • java中一共有8种基本数据类型,分为4种整型、2种浮点类型、1种用于表示Unicode编码的字符类型,和一种表示真值的布尔类型

整型

  • int4字节,占32位,取值范围为-231~231-1
  • short2字节,占16位,取值范围为-215~215-1
  • long8字节,占64位,取值范围为-263~263-1
  • byte1字节,占8位,取值范围为-27~27-1
  • long型后缀Ll,十六进制数值前缀0x0X,八进制前缀0,二进制前缀0b0B

浮点类型

  • float:4字节,占32位,取值范围为-231~231-1,有效位数为6~7
  • double:8字节,占64位,取值范围为-263~263-1,有效位数为15
  • float类型后缀Ff,没有后缀的浮点数值默认为double类型,double后缀为Dd
  • 浮点数值计算会有误差,例如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++)中,01可以分别代表falsetrue,但是在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、shortint的常量表达式
    • 枚举类型
    • java SE 7开始,还可以是字符串字面量

大数值

  • BigIntegerBigDecimal类包含在Math包中,用于处理任意长度数字序列的数值,BigInteger实现了任意精度的整数运算,BigDecimal实现了任意精度的浮点数运算
  • 使用这两个类静态的valueOf方法可以将普通的数值转换为大数值,不能使用算术运算符处理大数值,只能使用大数值类中的addmultiply等方法

猜你喜欢

转载自blog.csdn.net/Nbin_Newby/article/details/120505982