java if equals_java if判断里的“==”和equals(),与字符串相等判断有关。

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()不相等,第二段代码却又相等了。

有朋友知道这是怎么回事吗?谢谢了

我想我已经知道问题所在了

两种方式建立的字符串对象的内部机制是不同的!!

==是对比引用!

展开

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值