论坛首页 招聘求职论坛

问一个不太明白的面试题

浏览 10235 次
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-07-14   最后修改:2009-07-14
1,下面这个实现有什么问题?
public interface IRev {
public String reverse(String str);
}
public class myClass implements IRev {
public String reverse(String str) {
if ((null == str) || (str.length() <= 1)) {
return str;
}
return new StringBuffer(str).reverse().toString();
}
}


这个没有语法问题,也跑得通,但是对方问我这个实现什么时候go wrong,我没啥头绪。
   发表时间:2009-07-14  
空串处理不对,但不会抛错
0 请登录后投票
   发表时间:2009-07-14   最后修改:2009-07-14
西北野狼 写道
空串处理不对,但不会抛错

if ((null == str) || (str.length() <= 1)) {
            return str;
        }
0 请登录后投票
   发表时间:2009-07-14   最后修改:2009-07-14
没什么不对的

----------------------------------------
原来是这样
0 请登录后投票
   发表时间:2009-07-14   最后修改:2009-07-14
if ((null == str) || (str.length() <= 1)) {   
   return str;   
} 


如果str为空,你返回的值是空,如果在其他地方你用到这个返回值,则会有空指针异常。如:
String s = myclass.reverse(str);
s.hashCode();//调用s的任何一个方法都会有异常


0 请登录后投票
   发表时间:2009-07-14  
这类问题应该在调用reverse()方法前就要判断是否为空了,最好不要在reverse()方法里判断。
0 请登录后投票
   发表时间:2009-07-14  
public class myClass implements IRev {

	public String reverse(String str) {
		if ((null == str) || (str.length() <= 1)) {   
			return "";   
		}   
		return new StringBuffer(str).reverse().toString();  
	}	
}
0 请登录后投票
   发表时间:2009-07-14  
langhua9527 写道
public class myClass implements IRev {

	public String reverse(String str) {
		if ((null == str) || (str.length() <= 1)) {   
			return "";   
		}   
		return new StringBuffer(str).reverse().toString();  
	}	
}


这样做会把单字符的字符串改变了。
要不在reverse前判断,要不就不要 str.length() <= 1
0 请登录后投票
   发表时间:2009-07-14  
藝之憾 写道
if ((null == str) || (str.length() <= 1)) {   
   return str;   
} 


如果str为空,你返回的值是空,如果在其他地方你用到这个返回值,则会有空指针异常。如:
String s = myclass.reverse(str);
s.hashCode();//调用s的任何一个方法都会有异常



单单就上面的代码。。没什么错
0 请登录后投票
   发表时间:2009-07-14   最后修改:2009-07-14

if ((null == str) ||[color=red] (str.length() <= 1)[/color]) {
return str;
}



这个地方会出现空字符串的情况。

0 请登录后投票
论坛首页 招聘求职版

跳转论坛:
Global site tag (gtag.js) - Google Analytics