package test;public class Equals 
{
public static void main(String[] args) 
{
String s1 = new String("a");
String s2 = new String("a");
String s3 = s1;
Fun(s1,s2);
Fun(s1,s3);
/*
 * "=="与equals的区别
if(s1 == s2)
{
System.out.println("s1与s2相等!");
}
else 
{
System.out.println("s1与s2不相等!");
}
if(s1.equals(s3))
{
System.out.println("s1与s3相等!");
}
else
{
System.out.println("s1与s3不相等!");
}
*/
}
//若是调用函数Fun 来实现上段屏蔽的代码 该怎么写呢?
static Class Fun(String a , String b)
{
if(a == b)
{
System.out.println(a+"与"+b+"相等!");
}
else
{
System.out.println(a+"与"+b+"不相等");
}
if(a.equals(b))
{
System.out.println(a+"与"+b+"相等!");
}
else
{
System.out.println(a+"与"+b+"不相等!");
}
return null;
}
}
以上程序运行结果如下:
a与a不相等
a与a相等!
a与a相等!
a与a相等!要的不是这种结果啊 为什么会出现这样的结果呢?哪里错误?

解决方案 »

  1.   

    没错呀~~ 就是这结果~~楼主先看看 == 和 equals 比较的区别吧
      

  2.   

    晕 我想问为什么结果不是
    s1与s2不相等!
    s1与s3相等!
      

  3.   

    s3引用了s1的地址当然相等  s1 s2只是值相等
      

  4.   

    恩 介个俺也知道 可是为神马多写了一个Fun() 调用起来就得不到原来的结果呢 哪里调用出错了哈
      

  5.   

    ==是要比较地址相等
    equals是比较地址间所存在的内容是否相等
      

  6.   

    ==是同一个对象时才会相等,就好像你的String s3=s1,s3指向了s1的逻辑地址,而new就是新创建了一个对象,逻辑地址不一样了;
    equals是值相等
      

  7.   

    晕啦 我的意思是:判断s1等不等于s2或者等不等于s3 能用==或者eauals两种方法来判断 判断的结果也不一样 
    如果我再想判断s1等不等于s4,5,6,7,……代码重复的要死 
    所以能不能用个函数来实现 
    可是我发觉我写的那个糟烂函数果然错了 调用这个函数时错在哪里呢?
      

  8.   


    简直就是一团糟,问题说明糟糕,目标糟糕,代码贴得糟糕,弄得看问题的人一头雾水,好不容易才理清楚头绪,Fun函数还声明成什么“static class Fun(String a , String b)”,class 还是method??"a与b是否相等"???a和b是什么啊?无从来由,先自己想清楚了,还没想就来发帖子。首先String s1 = new String("a");
    String s2 = new String("a");
    String s3 = s1;s1肯定不等于s2
    创建s1对象时,在字符串常量池里会开辟一块空间保存字符串"s",然后会在堆中给s1对象分配一块空间,该空间存储的是字符串常量池中"s"的地址,比如0X3D;
    创建s2对象时,会在堆中给s2对象分配一块空间,该空间同样保存"s"的地址0X3D,即和s1指向字符串常量池中同一个字符串"s";
    但是栈中的引用变量s1和s2保存的是各自对象在堆中不同空间的地址,所以s1肯定不等于s2;有了上面的解释,s1肯定就等于s3了,String s3 = s1是把s1的地址给了copy给了s3,s1和s3指向同一块空间,所以他们相等。对于复杂类型的比较,==比的是引用变量的地址,equals比的是String的内容,具体看API去,不多说。至于测试的代码,多用点心还是能写出来的,没必要给你写这么简单的代码。
      

  9.   

    呵呵 ,楼主可以看看这篇文章:http://www.ityangba.com/thread-53-1-1.html
      

  10.   

    你屏蔽的是比较
    if(s1 == s2)
    if(s1.equals(s3))而你的fun方法,则是比较
    fun(s1,s2)
    s1 == s2
    s1.equals(s2)fun(s1,s3)
    s1 == s3
    s1.equals(s3)所以当然不会一样!!而且你 fun 里的输出,
    a 的值是 a ,
    b 的值也是 a 才会出现 “a 与 a 相等 ”
      

  11.   

    对象之间的==,表示2个对象的引用相等。
    对象之间的equal,表示内容相等。
    研究下对象的toString(),hashCode()方法。