abstractclassFood{voidtaste(){System.out.println(this+".taste()");}abstractpublicStringtoString();}classCandyextendsFood{publicCandy(){System.out.println("CandyCreated!")...
abstract class Food{
void taste(){System.out.println(this+".taste()");}
abstract public String toString();
}
class Candy extends Food{
public Candy(){System.out.println("Candy Created!");}
public String toString(){return "Candy";}
}
class Cake extends Food{
public Cake(){System.out.println("Cake Created!");}
public String toString(){return "Cake";}
}
class Milk extends Food{
public Milk(){System.out.println("Milk Created!");}
public String toString(){return "Milk";}
}
public class SweetShop {
public static void main(String[] args) {
if(args.length>1){
System.out.println("The arguments are too many!");
System.exit(1);
}
if(args[0].equals("Candy")){
Food food=new Candy();
}else if(args[0]=="Cake"){
Food food=new Cake();
}else if(args[0]=="Milk"){
Food food=new Milk();
}else
System.out.println("The arguments is error!");
}
}
这个程序是根据args参数输入来确定创建不同的对象,我输入Candy,就创建Candy对象。
程序基本没问题,但是在判断args[0]的时候却有点问题:
程序的最初版本我在判断args[0]的时候是用 if(args[0]=="Candy")也就是“==”来判断的,但是不管怎么输入都是提示你"The arguments is error!"
然后我把==换成了equals,也就是上面那段代码,if(args[0].equals("Candy")),结果起作用了。
印象中java里的String类的equals已经被重写了,效果和“==”是一样的才对。于是我又另外做了测试:
public class aboutEquals {
public static void main(String[] args) {
String string="123";
System.out.println(string=="123");
System.out.println(string.equals("123"));
if(string=="123")
System.out.println("PASS \"==\"!");
if(string.equals("123"))
System.out.println("PASS \"equals\"!");
}
}
运行结果:
true
true
PASS "=="!
PASS "equals"!
====
让人郁闷啊,第一段代码的“==”和equal()不相等,第二段代码却又相等了。
有朋友知道这是怎么回事吗?谢谢了
我想我已经知道问题所在了
两种方式建立的字符串对象的内部机制是不同的!!
==是对比引用!
展开