但是,在Java中,C/C++这种”if (i = 1)”的语法是不可能出现的,因为一旦写了这种语法,Java就会编译报错”Type mismatch: cannot convert from int to boolean”。但是,尽管Java的”if (i == 1)”和”if (1 == i)”在语义上没有任何区别,但是从阅读习惯上讲,建议使用前者会更好些。
30、不要对数组使用toString方法
看一下对数组使用toString打印出来的是什么:
- public static void main(String[] args)
- {int is = new int{1, 2, 3};
- System.out.println(is.toString);
- }
结果是:
- [I@18a992f
本意是想打印出数组内容,却有可能因为数组引用is为空而导致空指针异常。不过虽然对数组toString没有意义,但是对集合toString是可以打印出集合里面的内容的,因为集合的父类AbstractCollections重写了Object的toString方法。
31、不要对超出范围的基本数据类型做向下强制转型
这绝不会得到想要的结果:
- public static void main(String[] args)
- {
- long l = 12345678901234L;inti = (int)l;System.out.println(i);
- }
我们可能期望得到其中的某几位,但是结果却是:
- 1942892530
解释一下。Java中long是8个字节64位的,所以12345678901234在计算机中的表示应该是:
- 0000 0000 0000 0000 0000 1011 0011 1010 0111 0011 1100 1110 0010 1111 1111 0010
一个int型数据是4个字节32位的,从低位取出上面这串二进制数据的前32位是:
- 0111 0011 1100 1110 0010 1111 1111 0010
这串二进制表示为十进制1942892530,所以就是我们上面的控制台上输出的内容。从这个例子上还能顺便得到两个结论
- 整型默认的数据类型是int,long l = 12345678901234L,这个数字已经超出了int的范围了,所以最后有一个L,表示这是一个long型数。顺便,浮点型的默认类型是double,所以定义float的时候要写成””float f = 3.5f”
- 接下来再写一句”int ii = l + i;”会报错,因为long + int是一个long,不能赋值给int
32、公用的集合类中不使用的数据一定要及时remove掉
如果一个集合类是公用的(也就是说不是方法里面的属性),那么这个集合里面的元素是不会自动释放的,因为始终有引用指向它们。所以,如果公用集合里面的某些数据不使用而不去remove掉它们,那么将会造成这个公用集合不断增大,使得系统有内存泄露的隐患。
3 3、把一个基本数据类型转为字符串,基本数据类型.toString是最快的方式、String.valueOf(数据)次之、数据+””最慢
把一个基本数据类型转为一般有三种方式,我有一个Integer型数据i,可以使用i.toString、String.valueOf(i)、i+””三种方式,三种方式的效率如何,看一个测试:
- public static void main(String[] args)
- {
- int loopTime = 50000;
- Integer i = 0;
-
- long startTime = System.currentTimeMillis;for (int j = 0; j < loopTime; j++){String str = String.valueOf(i);
- }
- System.out.println("String.valueOf:" + (System.currentTimeMillis - startTime) + "ms");
- startTime = System.currentTimeMillis;for (int j = 0; j < loopTime; j++)
- {
- String str = i.toString;
- }
- System.out.println("Integer.toString:" + (System.currentTimeMillis - startTime) + "ms");
- startTime = System.currentTimeMillis; for (int j = 0; j < loopTime; j++)
- {
- String str = i + "";
- }
- System.out.println("i + \"\":" + (System.currentTimeMillis - startTime) + "ms");
- }
运行结果为:
- String.valueOf:11ms Integer.toString:5ms i + "":25ms
(编辑:ASP站长网)
|