Re:Java常用API中的一些细节

1,Math.round(11.5)等于多少?Math.round(- 11.5) 又等于多少?

  Math.round(11.5)的返回值是 12,Math.round(-11.5)的返回值是-11。四舍五入的原理是在参数上加 0.5然后进行取整。

2,switch 是否能作用在 byte 上,是否能作用在 long 上,是否能作用在 String上?

  Java5 以前 switch(expr)中,expr 只能是 byte、short、char、int。从 Java 5 开始,Java 中引入了枚举类型,expr 也可以是 enum 类型。

  从 Java 7 开始,expr 还可以是字符串(String),但是长整型(long)在目前所有的版本中都是不可以的。

  Java中switch为什么不能使用long的根本原因是long转化成int会丢失精度,导致数据不准确,所以Java的switch有不允许使用long的逻辑规则。

3,数组有没有 length() 方法?String 有没有 length() 方法?列表有没有length?

  数组没有 length()方法,而是有 length 的属性。String 有 length()方法。列表也没有length方法,有size方法。JavaScript 中,获得字符串的长度是通过 length 属性得到的,这一点容易和 Java 混淆。


4,什么情况下用“+”运算符进行字符串连接比调用 StringBuffer/StringBuilder对象的 append 方法连接字符串性能更好?

  编译器将"+"转换成了 StringBuilder,但创建 StringBuilder 对象的位置却在 for 语句内部。这就意味着每执行一次循环,就会创建一个 StringBuilder 对象(对于本例来说,是创建了 10 个 StringBuilder对象),虽然 Java 有垃圾回收器,但这个回收器的工作时间是不定的。如果不断产生这样的垃圾,那么仍然会占用大量的资源。解决这个问题的方法就是在程序中直接使用 StringBuilder 来连接字符串,

1. String 对象的 intern()方法会得到字符串对象在常量池中对应的版本的引用(如果常量池中有一个字符串与String 对象的 equals 结果是 true),如果常量池中没有对应的字符串,则该字符串将被添加到常量池中,然后返回常量池中字符串的引用;

2. 字符串的+操作其本质是创建了 StringBuilder 对象进行 append 操作,然后将拼接后的 StringBuilder 对象用 toString 方法处理成 String 对象,这一点可以用 javap -c XxxTest.class 命令获得 class 文件对应的 JVM 字节码指令就可以看出来。

  

猜你喜欢

转载自www.cnblogs.com/noperx/p/11360759.html