Java基础(二)

一、BigDecimal 等值比较

  • compareTo()
    • 忽略精度
  • equals()
    • 比较值和精度(1.0,1.00比较结果为false)
  • ==
    • BigDecimal是对象,不能用==比较值
  • BigDecimal(Double)创建是损失精度的
  • BigDecimal(String)创建是精确的

二、对负数取绝对值不一定是正数

  • Math.abs()
    • int: − 2 31 —— 2 31 − 1 -2^{31}——2^{31} - 1 231——2311
    • − 2 31 -2^{31} 231取负数越上界,取补码还是负数
    • 所以在取绝对值之前int转为long即可

三、String、StringBuilder、StringBuffer

  • String
    • 不可变(String类被声明为final,不可被继承,方法无法被覆盖。且其中没有提供修改字符串的方法,要“修改”则创建新的对象)
    • “+” 拼接字符串实际是语法糖。将String转为了StringBuilder然后append
    • 不建议在for循环中用“+”拼接字符串(每次都实际上新建了对象)
  • StringBuilder
    • 可变
    • 非线程安全
    • 其中的char[] 不是final,所以可以修改
    • 循环体内用StringBuilder。append扩展字符串
  • StringBuffer
    • 可变
    • 线程安全(append方法用synchronized声明)

String a = “ab”; String b = “a” + “b”; a == b ?

  • "=="比较字符串对象的引用地址是否相同
  • a == b为true(分别都是字面量【固定值】)

String长度

  • 编译期:counstant_utf8_info结构来表示字符串常量的值:65535(即在使用String a = xxx时会有限制)
  • 运行期 :String的length是int类型, 2 31 − 1 2^{31} - 1 2311

语法糖

  • java虚拟机实际上不支持,编译阶段会还原为简单写法
  • switch支持String与枚举
    • switch “hello”实际上是switch 哈希值,然后用equals进行检查(万一哈希碰撞)
  • 泛型
    • 如:Map<String, String> map会进行类型擦除:Map map = new Hashmap()
  • 条件编译
  • 断言
    • assert,底层是if,true则继续执行,false则抛出asserterror打断程序
  • 可变参数
    • public static void xxx(String… strs){ }
    • 会建立一个数组,长度为调用该方法时传递的实参个数,然后把这个数组作为参数传到被调用函数里
  • 自动拆、装箱
    • 之前提过,响应数据类型包装类的ValueOf()
  • 枚举
    • enum,final修饰,不可被继承
  • 内部类
    • 嵌套类,内部类为外部类的一个成员class里套一个class
  • 增强for循环
    • for-each:for循环 +迭代器
    • for(String s : strs)
  • try-with-resources
    • try-catch-finally(里面关闭资源)
    • 如今变为try-catch

四、RPC接口返回的数据类型

  • 应该使用包装类而不是基本数据类型(如果接口异常可能返回默认值,float是0.0,Float是null。看到null知道明确出错,减少歧义)
  • 定义字段表示成功建议使用:Boolean success(首先作为接口的返回对象参数,不应该有不确定的值,Boolean默认值为null,boolean是false【会有歧义】)
  • POJO类中任何布尔变量都不要加is(success而不是issuccess),否则部分框架解析会引起序列化错误【boolean isSuccess是属性,有方法为isSuccess(),RPC框架在反向解析时,会认为属性名称是success,导致属性获取失败,抛出异常】

五、常见字符编码

  • ASCII:英文字符
  • Unicode:UTF-8之类
    • Unicode规定了编码,但没规定存储
    • utf-8:使用1-4个字节为每个字符编码
  • GBK:中文编码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值