java中的(p!= q)和!(p == q)有什么区别?

时间:2014-05-07 09:07:36

标签: java

如果你回答这个问题我会感谢你的....这是一个icse 10级标准问题。

我需要知道它们之间的区别 (p!= q)和!(p == q)

14 个答案:

答案 0 :(得分:9)

这里有两个不同的operators

x != y

检查x不等于y,而

!(expr)

使用一元否定运算符(!)来检查expr是否为真。所以你的第一个表达式检查 p不等于q 。您的第二个表达式检查表达式 p等于q 是否为真。这些(当然)是等价的。

答案 1 :(得分:8)

  

我需要知道(p!= q)和!(p == q)

之间的区别

在Java中,基本上没有。

p!=q确定p是否不等于q并且boolean true如果它们不相等,{false 1}}如果他们是。)

从理论上讲,

!(p==q)首先确定pq是否相等,并为我们提供boolean(如果是true,{{1如果他们不是,那么颠倒那个false(如果他们不相等则给我们booleantrue如果他们是平等的。

我在理论上说过#34;"因为如果编译器最终为两个表达式发出相同的字节码,我不会感到惊讶,只要它们是简单变量并且条件如图所示那样简单。


是的,为两者发出相同的字节码:

iload_1
iload_2
if_icmpeq   [address]

加载值并且如果相等则跳过""操作

答案 2 :(得分:2)

对于(p!=q ),你有:

true!=false--->True
true!=true---->False
false!=false-->False
false!=true--->True

对于!(p==q ),你有:

!(true==false)--->True
!(true==true)---->False
!(false==false)-->False
!(false==true)--->True

所以你看到没有区别

答案 3 :(得分:2)

它们功能相同但字节码不同。

第一个可能更有效(取决于编译器),因为检查是XOR op的副作用。但在第二个中,进行了比较,并根据结果设置了truefalse

使用ECJ编译器(合规级别1.7):

a=(p!=q)
12: iload_2
13: iload_3
14: ixor
15: istore_1

a=!(p==q)
24: iload_2
25: iload_3
26: if_icmpne     33
29: iconst_0
30: goto          34
33: iconst_1
34: istore_1

答案 4 :(得分:1)

  

我需要知道(p!= q)和!(p == q)

之间的区别

两者在 Java 中逻辑相同,检查条件p不等于q

答案 5 :(得分:0)

(P!= q)的

是p的值与q

不同

!(第== q)的

语句(p == q)给出的相反值 即

如果p等于q,则返回false

如果不是,则为真。

答案 6 :(得分:0)

  

我需要知道(p!= q)和!(p == q)之间的区别?

(P!= q)的

  

检查p是否不等于q,然后将其设为真

!(第== q)的

  

(p == q)检查两者是否相等,然后使其成立。否定运算符    (!)与布尔结果相反。即假。    这自然使它等于(p!=q),因为当p不是时,两个表达式都返回true   等于q

答案 7 :(得分:0)

我认为不同的是,即使你没有检查整数,也可以知道两个数字不相等。

(p!=q)

将停在第一个差异

!(p==q)

将在补充结果之前检查它们是否完全相等

答案 8 :(得分:0)

同样的事情,你可以尝试写下这样的真值表:

(a  !=   b)
 0   0   0
 1   1   0
 0   1   1
 1   0   1

 !  (a  ==   b)
 0   0   1   0
 1   1   0   0
 1   0   0   1
 0   1   1   1

如您所见,0, 1, 1, 0!=的结果,是!( ==)

的结果

答案 9 :(得分:0)

 p != q implies that p is not equal to q
 !(p==q) implies first execution of statement p==q and then the negation of the boolean value return after execution of first statement

假设p = 5且q = 5

1>

p != q: In this case, result of execution of the statement will be false.

2 - ;

!(p == q): In this case, result of execution of the first statement (p == q) will be true. Then negation of true will be false

假设p = 5且q = 6

1>

p != q: In this case, result of execution of the statement will be true.

2 - ;

!(p==q): In this case, result of execution of the first statement (p==q) will be false. Then negation of false which will be true

答案 10 :(得分:0)

真相表:

p q!p!q对于(p!= q)For!(p == q),即等价于(!p)!=(!q)

0 0 1 1 cond false cond false

0 1 1 0 cond true cond true

1 0 0 1 cond true cond true

1 1 0 0 cond false cond false

答案 11 :(得分:0)

实际上,(p!=q)!(p==q)之间没有任何区别。

如果true不等于p,他们都将返回q,如果false等于p,他们都会返回q

答案 12 :(得分:-1)

在Java 中,没有运算符重载,(p!=q)!(p==q)之间没有区别。 在Java中,所有运算符都是严格定义的。他们遵循数字逻辑规则。

但是,在运算符重载的语言中,如C++,这些可能不等效,因为运算符!!=可能被定义为执行不符合规则的操作数学逻辑。

这些将被翻译为:

(p!=q)  :   p.operator!=(q)
!(p==q) : ! p.operator==(q)

请注意!运算符应用于bool变量,而不是对象。

答案 13 :(得分:-1)

(p!=q)首先检查pq是否相等,然后给出布尔数据类型。

而{。!(p==q)首先检查pq是否相等,并给出布尔数据类型,然后反转该布尔值。