有关方法返回一个很奇怪的问题 - 问题已解决(转载)

http://www.blogjava.net/raylong1982/archive/2007/11/01/157542.html

 

早上看了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();
# }
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值