当前位置: 代码迷 >> J2SE >> 为什么是false?该怎么处理
  详细解决方案

为什么是false?该怎么处理

热度:183   发布时间:2016-04-24 15:13:25.0
为什么是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返回的对象的内容是一样的,但是因为是不同的对象,引用也不同
  相关解决方案