阿里巴巴Java开发规范

一直想要规范一下团队的开发代码。但是一直没有形成文档。今天又翻到阿里巴巴的开发规范,看到一些有意思的东西。记录一下。

容易犯错的

所有的相同类型的包装类对象之间值的比较,全部使用 equals 方法比较

说明:对于 Integer var = ? 在-128 至 127 范围内的赋值,Integer 对象是在
IntegerCache.cache 产生,会复用已有对象,这个区间内的 Integer 值可以直接使用==进行
判断,但是这个区间之外的所有数据,都会在堆上产生,并不会复用已有对象,这是一个大坑,
推荐使用 equals 方法进行判断。

1
2
3
4
Integer a = 11;
Integer b = 11;
//true
System.out.println(a == b);

虽然平时我都是用equals进行判断,但没想到在-128 至 127 范围内上面那样也是true的。
同时推荐一下这里推荐的equals工具类 java.util.Objects#equals(JDK7 引入的工具类);
源码如下

1
2
3
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}

使用工具类 Arrays.asList()把数组转换成集合时,不能使用其修改集合相关的方

法,它的 add/remove/clear 方法会抛出 UnsupportedOperationException 异常

说明:asList 的返回对象是一个 Arrays 内部类,并没有实现集合的修改方法。Arrays.asList
体现的是适配器模式,只是转换接口,后台的数据仍是数组。

1
2
String[] str = new String[] { "you", "wu" };
List list = Arrays.asList(str);

第一种情况:list.add(“yangguanbao”); 运行时异常。
第二种情况:str[0] = “gujin”; 那么 list.get(0)也会随之修改。