Posted on 2007-11-01 17:12
Raylong 阅读(1140)
评论(14) 编辑 收藏 所属分类:
感想随笔
早上看了java类库中java.util.Arrays 类的toString方法的源代码。如下:(这是JDK1.6的源代码)
public static String toString(long[] a) {
if (a == null)
return "null";
int iMax = a.length - 1;
if (iMax == -1)
return "[]";
StringBuilder b = new StringBuilder();
b.append('[');
for (int i = 0; ; i++) {
b.append(a[i]);
if (i == iMax)
return b.append(']').toString();
b.append(", ");
}
}
for循环有点奇怪,中间的那个表达式是空的。其实即使加上了条件,for (int i = 0; i<=iMax ; i++) 和源程序是一个效果的,纯粹是多余的,但是我就是多余地加上了这条,结果编译出错了!提示我没有返回语句!
我又重新编写了两个小程序来验证一下:
下面这个能通过编译:
class Test{
static String m(){
int a =10;
for (int i = 0; ; i++)
if(i==a)
return "10";
}
public static void main (String[] args) {
System.out.println (m());
}
}
for循环的中间语句是空的。
下面这个就不能编译了:
class Test{
static String m(){
int a =10;
for (int i = 0; i<=a ; i++)
if(i==a)
return "10";
}
public static void main (String[] args) {
System.out.println (m());
}
}
其实加上的语句并没有改变原来逻辑结构。这是为什么呢?
如果在for的外面加上一个return语句,随便返回什么字符串,又能通过编译了!!!这个字符串永远不能输出的!!!根本就是个摆设!!!
class Test{
static String m(){
int a =10;
for (int i = 0; i<=a ; i++)
if(i==a)
return "10";
return "never be touch!!!";
}
public static void main (String[] args) {
System.out.println (m());
}
}
另外如果像下面这样在for的中间表达式加上一个恒等式,又能通过编译了!!!这是为什么呢?请高手指点!
class Test{
static String m(){
int a =10;
for (int i = 0; true==true ; i++)
if(i==a)
return "10";
}
public static void main (String[] args) {
System.out.println (m());
}
}
附:这是JDK1.5的源码,谢谢GrayWolf!
1.6的代码到底比1.5的改进在哪里呢?我觉得1.5版的实现比较清晰,可读性好一点。
# public static String toString(long[] a) {
# if (a == null)
# return "null";
# if (a.length == 0)
# return "[]";
#
# StringBuilder buf = new StringBuilder();
# buf.append('[');
# buf.append(a[0]);
#
# for (int i = 1; i < a.length; i++) {
# buf.append(", ");
# buf.append(a[i]);
# }
#
# buf.append("]");
# return buf.toString();
# }