为什么是false?
class er{
public static void main(String arg[]){
Byte b1=new Byte( "127 ");
if(b1.toString()==b1.toString())
System.out.println( "true ");
else
System.out.println( "false ");
}
}
------解决方案--------------------应该这样:
===
class er{
public static void main(String arg[]){
Byte b1=new Byte( "127 ");
if(b1.toString().equals(b1.toString()))
System.out.println( "true ");
else
System.out.println( "false ");
}
}
------解决方案--------------------返回了两个指向String类型的引用,而着两个引用是不同的。。
------解决方案--------------------每一次调用.toString,都会生成一个新的对象的。
——如果让你来实现Byte.toString,你也只能这样做,否则的话,Byte类就需要一个填加一个静态的成员来记住它上次产生的那个String,下次用的时候看看是不是一样,而且还无法做到线程安全,总之乱套了。。。。
------解决方案--------------------顶
------解决方案--------------------==比较是基本类型的
对象的比较用到。equals方法比较是对像所指向的值
对象之间用==比较那是比较地址
------解决方案--------------------你在做比较的时候,应该分清楚要比较的是什么。对象与对象之间用==是比较两个对象是否引用自同一个对象(即指向同一块内存地址),用.equals是比较两个对象的值是否相同。
b1.toString()==b1.toString()你的这个语句其实生成了两个对象实例,在内存中有两块内存地址存放这两个对象实例,所以它一定是false了。
------解决方案--------------------:)
if(b1.toString().intern()==b1.toString().intern())
------解决方案--------------------比较STRING应该用EQUALS
------解决方案--------------------生成了2个对象,所以不相等
class er{
public static void main(String arg[]){
Byte b1=new Byte( "127 ");
String str1=b1.toString();
String str2=b1.toString();
if(str1==str2)
System.out.println( "true ");
else
System.out.println( "false ");
}
}
------解决方案--------------------==比较是基本类型的
对象的比较用到。equals方法比较是对像所指向的值
对象之间用==比较那是比较地址
===================================================
同意~~~~~~,虽然在Object中equal是用来比较两个对象指向的地址,但是在其子类中基本全部重写来用equal比较两个对象的内容。
------解决方案--------------------toString返回了2个string对象,==是比较引用,而不是比较内容。虽然2个toString返回的对象的内容是一样的,但是因为是不同的对象,引用也不同