Java中==与equalse有什么不同 &与&&有什么不同
展开全部
==在用来比较原类型时就表示是否相等,在比较复杂类型时(其他类型)表示两个对象的地址是否相等
equals是Object类的方法,被用来设计比较两个对象的值是否相等的,默认的实现和==相同,楼主可以看看Object类的源码。可以重写这个方法,比较两个对象的值。在大多数Java类库中的类中,equals方法都已经被重写,如String类等,返回的是两个对象的值是否相等。
&和 &&的意思差不多 &是非短路的条件语句,&&是短路的条件语句 看下面的例子就行了
(false && a > b),程序在执行时并不会判断a和b的大小关系,因为整个语句的值肯定是false
但是(false & a > b)中,程序会判断,所以说&是非短路的,大多数情况下推荐使用&&
|和||的关系和这个一样
equals是Object类的方法,被用来设计比较两个对象的值是否相等的,默认的实现和==相同,楼主可以看看Object类的源码。可以重写这个方法,比较两个对象的值。在大多数Java类库中的类中,equals方法都已经被重写,如String类等,返回的是两个对象的值是否相等。
&和 &&的意思差不多 &是非短路的条件语句,&&是短路的条件语句 看下面的例子就行了
(false && a > b),程序在执行时并不会判断a和b的大小关系,因为整个语句的值肯定是false
但是(false & a > b)中,程序会判断,所以说&是非短路的,大多数情况下推荐使用&&
|和||的关系和这个一样
展开全部
& 是按位运算(不常用), &&是逻辑运算(常用)短路与
&是java中的位逻辑运算:
eg:
2&3=2;
具体分析为:
2的二进制为10
3的二进制为11
逻辑&之后为10
&&是boolean的逻辑运算
eg:
if(1> 2&&3> 1)
表示如果两个条件都成立则执行之后的逻辑;
==操作符专门用来比较变量的值是否相等。比较好理解的一点是:
int a=10;
int b=10;
则a==b将是true。********************************本人觉得返回true的是那8大基本变量类型
但不好理解的地方是:
String a=new String("foo");
String b=new String("foo");
则a==b将返回false。
对象变量其实是一个引用,它们的值是指向对象所在的内存地址,而不是对象本身。a和b都使用了new操作符,意味着将在内存中产生两个内容为"foo"的字符串,既然是“两个”,它们自然位于不同的内存地址。a和b的值其实是两个不同的内存地址的值,所以使用"=="操作符,结果会是false。诚然,a和b所指的对象,它们的内容都是"foo",应该是“相等”,但是==操作符并不涉及到对象内容的比较。
对象内容的比较,正是equals方法做的事。
看一下Object对象的equals方法是如何实现的:
boolean equals(Object o)
{
return this==o;
}
Object对象默认使用了==操作符。所以如果你自创的类没有覆盖equals方法,那你的类使用equals和使用==会得到同样的结果。同样也可以看出,Object的equals方法没有达到equals方法应该达到的目标:比较两个对象内容是否相等。因为答案应该由类的创建者决定,所以Object把这个任务留给了类的创建者。
&是java中的位逻辑运算:
eg:
2&3=2;
具体分析为:
2的二进制为10
3的二进制为11
逻辑&之后为10
&&是boolean的逻辑运算
eg:
if(1> 2&&3> 1)
表示如果两个条件都成立则执行之后的逻辑;
==操作符专门用来比较变量的值是否相等。比较好理解的一点是:
int a=10;
int b=10;
则a==b将是true。********************************本人觉得返回true的是那8大基本变量类型
但不好理解的地方是:
String a=new String("foo");
String b=new String("foo");
则a==b将返回false。
对象变量其实是一个引用,它们的值是指向对象所在的内存地址,而不是对象本身。a和b都使用了new操作符,意味着将在内存中产生两个内容为"foo"的字符串,既然是“两个”,它们自然位于不同的内存地址。a和b的值其实是两个不同的内存地址的值,所以使用"=="操作符,结果会是false。诚然,a和b所指的对象,它们的内容都是"foo",应该是“相等”,但是==操作符并不涉及到对象内容的比较。
对象内容的比较,正是equals方法做的事。
看一下Object对象的equals方法是如何实现的:
boolean equals(Object o)
{
return this==o;
}
Object对象默认使用了==操作符。所以如果你自创的类没有覆盖equals方法,那你的类使用equals和使用==会得到同样的结果。同样也可以看出,Object的equals方法没有达到equals方法应该达到的目标:比较两个对象内容是否相等。因为答案应该由类的创建者决定,所以Object把这个任务留给了类的创建者。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询