标签:数组 一个 空间 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方法, 选取"内容"进行比较。
标签:数组 一个 空间 builder 类的方法 可变 功能 函数 api
原文地址:https://www.cnblogs.com/amazing-eight/p/13257295.html