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:子类是抽象类👌