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相等!要的不是这种结果啊 为什么会出现这样的结果呢?哪里错误?
{
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相等!要的不是这种结果啊 为什么会出现这样的结果呢?哪里错误?
s1与s2不相等!
s1与s3相等!
equals是比较地址间所存在的内容是否相等
equals是值相等
如果我再想判断s1等不等于s4,5,6,7,……代码重复的要死
所以能不能用个函数来实现
可是我发觉我写的那个糟烂函数果然错了 调用这个函数时错在哪里呢?
简直就是一团糟,问题说明糟糕,目标糟糕,代码贴得糟糕,弄得看问题的人一头雾水,好不容易才理清楚头绪,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去,不多说。至于测试的代码,多用点心还是能写出来的,没必要给你写这么简单的代码。
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 相等 ”
对象之间的equal,表示内容相等。
研究下对象的toString(),hashCode()方法。