java最常犯的10个错误(6-10)

java最常犯的10个错误(6-10)


6,访问权限

这个太基础了,但是很多开发人员总是图省事,或者其他原因,滥用public。

这里还是想提一下。

7, ArrayList vs. ArrayList

很多开发者在不了解二者区别的情况下,喜欢使用ArrayList。因为这个看起来更熟悉。

其实在这二者存在巨大的性能差距。在有大量add/remove操作,而随即查询的操作不多的情况下,是应该优先选用ArrayList。

8,可变对象 vs. 不可变对象

不可变对象有很多好处,比如简单、安全等等。但是这需要每一个值都有一个独立的对象,而过多的对象可能会触发垃圾回收。

通常,可变对象用来避免产生过多的中间对象,最常见的例子就是String

这个比较简单

9,父类和子类的构造器

 class Super {
String s;
public Super(String arg){
this.s = arg;
}
}
public class Sub extends Super{
public Sub(){
}
public Sub(String aa){
// super("ss");
}
}

基础知识了。如果一个类没有显式定义一个构造器,java编译器会自动插入一个无参构造器。一旦有显式定义的构造器,这个无参构造器便不会自动插入了。

然而,在子类中,不管是有参的构造器还是无参构造器,都是默认去掉用父类的无参构造器,这就是代码编译报错的原因了。

修改:

1,父类加上无参构造器

2,父类去掉自定义的构造器,这个一般不会采用

3,子类的构造器中第一句加上super("xx")

10,字符串使用""和构造器的区别

基础问题了,new String()是构造一个新的对象,==比较对象地址。

 String a = "abcd";
String b = "abcd";
System.out.println(a == b); // True
System.out.println(a.equals(b)); // True
String c = new String("abcd");
String d = new String("abcd");
System.out.println(c == d); // False
System.out.println(a == d); // False
System.out.println(a == c); // False
System.out.println(c.equals(d)); // True

a和b都是对应着方法区常量池中的字符串。而c和d是堆中新建了两个对象。

java最常犯的10个错误(6-10)


分享到:


相關文章: