java 问题求解释
中午写了一段代码,题目要求是比较两个字符串,假如字符串为空对象,产生异常。代码:public class Compare {
private String string_1;
private String string_2;
Compare(String string_1,String string_2){
this.string_1=string_1;
this.string_2=string_2;
}
void test(){ //两个字符串比较,如有空字符触发异常
try{
if(string_1.equals(string_2)){
System.out.println("string is equal.");
}
else {
System.out.println("string isn't equal.");
}
}
catch(NullPointerException e){
System.out.println("Please input two strings.");
}
}
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
System.out.println("Please input two strings:\n");
String string_1=br.readLine();
String string_2=br.readLine();
string_1=string_1.trim();
string_2=string_2.trim();
Compare compare=new Compare(string_1,string_2);
compare.test();
}
}
求大神指教错在哪了。。。
----------------解决方案--------------------------------------------------------
NullPointerException 是空指针异常,不是空字符串
空字符串对比
String str="";
if("".equals(str)){
//str为空字符串
}
[ 本帖最后由 shellingford 于 2012-12-3 17:10 编辑 ]
----------------解决方案--------------------------------------------------------
如果不输入则为NULL NULL值 如何比较呢!!!!!
----------------解决方案--------------------------------------------------------
回复 2楼 shellingford
亲,题目就是比较两个字符串,如果一个字符串为空对象,产生一个NullPointerException异常,适当时候触发异常。 ----------------解决方案--------------------------------------------------------
回复 3楼 hhwz
不输入不是NULL,是"",代表空字符,不是未指定到对象。 ----------------解决方案--------------------------------------------------------
回复 4楼 博望、小五
亲,二楼的话你没有理解呀,人家说的很好了。你不输入直接回车,从控制台读入的是空字符串"",所以string_1="";其实这些东西,你可以写两句代码,验证一下,或者使用Debug调试。 ----------------解决方案--------------------------------------------------------
回复 6楼 烧包谷
亲,不输入直接回车我试过了,是能比较,但是不能触发异常。 ----------------解决方案--------------------------------------------------------
回复 7楼 博望、小五
永远不会捕捉到空指针异常的第一,你直接回车得到的是空字符串而不是空
第二
String string_1=br.readLine();
String string_2=br.readLine();
string_1=string_1.trim();
string_2=string_2.trim();
Compare compare=new Compare(string_1,string_2);
触发空指针异常的条件是string_1和string_2其中一个为NULL,如果这个条件成立了,下面2句话会报错
string_1=string_1.trim();
string_2=string_2.trim();
也不可能运行到你的try catch代码中
----------------解决方案--------------------------------------------------------
当然 如果你非要产生空指针异常那就这样改
程序代码:
public class Compare {
private String string_1;
private String string_2;
Compare(String string_1,String string_2){
if(!"".equals(string_1)){
this.string_1=string_1;
}
if(!"".equals(string_2)){
this.string_2=string_2;
}
}
void test(){ //两个字符串比较,如有空字符触发异常
try{
if(string_1.equals(string_2)){
System.out.println("string is equal.");
}
else {
System.out.println("string isn't equal.");
}
}
catch(NullPointerException e){
System.out.println("Please input two strings.");
}
}
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
System.out.println("Please input two strings:\n");
String string_1=br.readLine();
String string_2=br.readLine();
string_1=string_1.trim();
string_2=string_2.trim();
Compare compare=new Compare(string_1,string_2);
compare.test();
}
}
private String string_1;
private String string_2;
Compare(String string_1,String string_2){
if(!"".equals(string_1)){
this.string_1=string_1;
}
if(!"".equals(string_2)){
this.string_2=string_2;
}
}
void test(){ //两个字符串比较,如有空字符触发异常
try{
if(string_1.equals(string_2)){
System.out.println("string is equal.");
}
else {
System.out.println("string isn't equal.");
}
}
catch(NullPointerException e){
System.out.println("Please input two strings.");
}
}
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
System.out.println("Please input two strings:\n");
String string_1=br.readLine();
String string_2=br.readLine();
string_1=string_1.trim();
string_2=string_2.trim();
Compare compare=new Compare(string_1,string_2);
compare.test();
}
}
----------------解决方案--------------------------------------------------------
回复 9楼 shellingford
谢谢,知道了。 ----------------解决方案--------------------------------------------------------