JAVA自学时,阅读一些程序出现的一些问题


1 public class Point{ 2 String str = new String("good"); 3 char[] ch= {'a','b','c'}; 4 public void change(String str,char ch[]) { 5 str="test ok"; 6 ch[0]='g'; 7 } 8 public static void main(String args[]) { 9 Point ex=new Point(); 10 ex.change(ex.str, ex.ch); 11 System.out.print(ex.str+" and "); 12 System.out.println(ex.ch); 13 } 14 }

输出:good and gbc

错误原因:不熟悉形参和实参的区别。

2:

 1 class D{
 2     public static void main(String args[]) {
 3         String s1 = new String("hello");
 4         String s2 = new String("hello");
 5         if(s1.equals(s2))
 6             System.out.println("equal");
 7         else
 8             System.out.println("not equal");
 9     }
10 }
11 class E{
12     public static void main(String[] args) {
13         StringBuffer sb1 = new StringBuffer("hello");
14         StringBuffer sb2 = new StringBuffer("hello");
15         if(sb1.equals(sb2))
16             System.out.println("equal");
17         else
18             System.out.println("not equal");
19     }
20 }
21 public class Point{
22     public static void main(String[] args)
23     {
24         D a=new D();
25         D.main(null);;
26         E b=new E();
27         E.main(null);
28     }
29 }

输出:equal
not equal
原因:对String类来说,它实现了父类的equals方法,比较的是字符串值的大小;而StringBuffer则不一样,它并没有实现equals方法,而是将俩个引用直接比较,所以sb.equals(tb)输出false。hashcode()方法也是一个道理。

3:

 1 public class Point{
 2     public static void main(String[] args)
 3     {
 4         String str1="abc";
 5         String str2="def";
 6         String str3=str1.concat(str2);
 7         str1.concat(str2);
 8         System.out.println(str1);
 9     }
10 }

输出:abc

原因:不了解concat的用法,str1=str1.concat(str2),这样输出的才是abcdef。而题目中的str1.concat(str2);只是一个式子,相当于只是“计算”了,缺没有赋值。

4:

解释:当子类继承的父类是抽象类那么只有两种情况是正确的(通过编译= =、)。

1:子类实现父类的所有抽象方法

2:子类是抽象类👌

 

posted @ 2018-07-27 16:37  jealous-boy  阅读(100)  评论(0编辑  收藏  举报