今天用递归算法实现一个反序打印的小程序,当输入over时结束输入,反序打印,但是算法不能成功
//用递归实现反序打印
public static void reverse() {java.util.Scanner in = new java.util.Scanner(System.in);
String ch = in.nextLine();
if (ch != "over") {
reverse();
System.out.print(ch + ",");
}
}
反复琢磨最后发现,原来java ==和equals方法不同,当他们用(==)进行比较的时候,比较的是他们在内存中的存放地址,因为(ch)的地址和(over)的地址不同(两个不同的对象),当String中equals方法是比较字符串。JAVA当中所有的类都是继承于Object这个基类的,在Object中的基类中定义了一个equals的方法,这个方法的初始行为是比较对象的内存地 址,但在一些类库当中这个方法被覆盖掉了,如String,Integer,Date在这些类当中equals有其自身的实现,而不再是比较类在堆内存中的存放地址了。
所以把if ((!ch.equals("over")) 就可以实现程序功能了。