java基础系列(四):常用API的用法及区别

2021-04-25 04:29

阅读:332

标签:数组   一个   空间   builder   类的方法   可变   功能   函数   api   

持续更新中。。。。

1.String,StringBuffer与StringBuilder的区别?

  String底层是final修饰的byte数组,属于不可变的对象,但是可以通过反射改变它的值。操作String时会生成新的String对象,不仅效率低下,而且会浪费有限的内存空间。为了应对经常的字符串操作,就引入了StringBuilder类和StringBuffer类。

  StringBuilder与StringBuffer类的方法和功能完全是等价的,都继承于AbstractStringBuilder。StringBuffer是线程安全的,里面的方法大都采用synchronized关键字进行修饰。StringBuilder不是线程安全的。StringBuilder和StringBuffer的字符操作都是通过调用System.arraycopy()来实现的,String的方法是通过new 一个新对象来实现的。三者的速度上:StringBuilder>StringBuffer>String。

2.Round,ceil与floor函数的区别?

   round方法,在Math中有重载的,一个参数是float,一个是double,对应返回int和long值。返回值是当前值+0.5向下取整(-0.5 ---> 0);ceil方法,没有重载,参数就是double,返回值也是double,但是这个时候就有区别了,向上取整(-0.5 ---> -0.0),注意一下,负号是保留的,和round有区别的; floor方法,和ceil一样,没有重载,参数和返回值都是double,向下取整(-0.5 --> -1.0)。

3.System.arraycopy(), clone()和Arrays.copyOf的效率比较?

  arraycopy()是本地方法,clone()也是本地方法,Arrays.copyOf()底层调用的是arraycopy()方法,效率比较:System.arraycopy>clone>Arrays.copyOf()

4.==,obj.equals()和Arrays.equals()方法的比较?

  == 比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是指相同一个对象。比较的是真正意义上的指针操作。equals用来比较的是两个对象的内容是否相等,由于所有的类都是继承自java.lang.Object类的,所以适用于所有对象,如果没有对该方法进行覆盖的话,调用的仍然是Object类中的方法,而Object中的equals方法返回的却是==的判断。所以一般可以重写equals方法, 选取"内容"进行比较。

  

java基础系列(四):常用API的用法及区别

标签:数组   一个   空间   builder   类的方法   可变   功能   函数   api   

原文地址:https://www.cnblogs.com/amazing-eight/p/13257295.html


评论


亲,登录后才可以留言!