String s=method(para);
String f="Y";
  if(s==f)
  {
        System.out.println("=");    (1)
  }
byte[] a=s.getBytes();
for(byte b :a){
System.out.println(b); (2)
}
byte[] c=f.getBytes();
for(byte b :c){
        System.out.println(b);  (3)
}方法method明明返回的是“Y”,但就是不执行语句(1),而在执行(2)和(3)的时候输出的都是89,那说明变量s和f的值应该是一样的吧,请问各位这是为什么。

解决方案 »

  1.   

    对象之间要用equals方法比较 String f="Y"; f变量存放的是指向"Y"变量的地址 String s=method(para); 是变量存放的是指像method方法的地址  两个地址不一样 用==比较肯定不相等拉
      

  2.   

    建议看看源码,==和equals的区别,这里应该用equals
      

  3.   

    ==比较的是变量在内存中的地址两个String型的变量在内存地址上显然不等
    比较值相等你可以用equals方法if(s.equals(f)) 
    这样就ok了
      

  4.   

    这是个初学者常常混淆的问题,在java中有两种比较方法,一种是用"==",别一种是用"equal()"方法。"=="有两种用法,
    一是用来比较基本数据类型,如integer, boolean, byte等。 
    二是用来比较对像实例的引用(reference to an object instance),对像(object)的一个实例在内存里的表现形式是内存地址,所以如果两个对像的引用指向的是同一个内存地址,那么那两个引用的就是同一个对象。所以,当用"=="比较两个object时,实际上比较object的地址,而不是值。
    如: 
    String a = new String("abc");
    String b = new String("abc");a == b 将反回false,因为两个是不同的对象实例。正确的方法是用object的equal()方法。java中所用类的根类是Object类,Object类中定义了equal()方法,用来比较两个对像的值是否相等。同时,还有hash()方法,可以用来定义如果判断两个object是想等的。
      

  5.   

    这个问题问了很多次了..
    应该用equals
    而不是像C语言那样用==
    equals比较的是内容
    ==比较的是内存地址
      

  6.   

    楼上都说的很对,想必楼主刚学java 吧
      

  7.   

    是啊是啊 刚学java肯定对equle和==搞不太清楚 
      

  8.   

    初学java  都出现这种情况
      

  9.   

    楼主应该是刚学完C吧,在java中字符串的比较用equals()方法,因为java是面向对象的语言,不涉及到内存地址,也不触及到指针概念。所以java的安全性很高。楼主加油···
      

  10.   

    用equals();== 是比较地址的。多多看看书 最好是找些视频看,j2se一般都是免费的。
      

  11.   

    字符串是对象,比较值的话要用equals()方法啊,比较地址才用==的。对于基本类型,比如int啊,char啊,float啊,用==就是比较值的大小了。不过新建的class类生成的对象,用==比较两个对象时,这时候==默认的又是比较地址了。你自己写个程序试下就明白了!
      

  12.   

    谢谢各位,我原来是用.net(C#)的,在C#里面是可以直接比较的。。