小编Gau*_*rav的帖子

列表包含不安全的方法

虽然经历了这个问题:" 如果一个对象包含一个链表内检查 ",我发现用户正试图通过一个字符串参数到包含类型链表的链表的方法:

    LinkedList<LinkedList> list = new LinkedList<LinkedList>();

    list.contains("String");
Run Code Online (Sandbox Code Playgroud)

这不会引发任何编译错误,因为'contains'方法接受java.lang.Object并允许向其传递字符串值.

所以,只是出于好奇,我想知道为什么这种方法选择接受"对象",当它可能已被限制为仅接受列表类型(就像添加).是不是打败了泛型的整个目的,即"在编译时更强的类型检查"?

java generics

15
推荐指数
2
解决办法
1497
查看次数

Java编译器用+连接替换StringBuilder

这是一些简单的Java代码:

String s = new StringBuilder().append("a").append("b").append("c").toString();
Run Code Online (Sandbox Code Playgroud)

我用JRE 1.6编译它,我在反编译的类文件中观察到以下内容:

String s = "a" + "b" + "c";
Run Code Online (Sandbox Code Playgroud)

根据这个观察我有以下问题:

  1. 为什么编译器会在StringBuilder上选择"+"?
  2. 我们是否有任何正式的Java规范可以证明这种行为是正确的?
  3. 在这种情况下使用StringBuilder是否真的有意义,我们知道编译器会改变它吗?

java stringbuilder compiler-optimization

4
推荐指数
1
解决办法
3311
查看次数