问题描述
- if (k==1) if (1==k) if(k=1)三者有什么区别,为什么没有if(1=k)
-
if (k==1) if (1==k) if(k=1)三者有什么区别,为什么没有if(1=k)
解决方案
k==1
1==k是一样的。
k=1是赋值表达式,它也可以视作一个bool表达式,当k=0的时候是false,否则是true
1=k作为赋值表达式是不合法的。
解决方案二:
对于java来说:
楼主指定的k应该是一个int型变量,属于基本数据类型,基本数据类型在java内存的常量区,如果赋值相同,那么内存地址也是相同的。
首先=号是赋值符号,表达为左侧变量创建一个引用,指向右侧变量或常量的内存地址。
其次==号是逻辑符号,表达左侧变量或常量和右侧变量或常量的内存地址是否相等。
那么,k如果赋值为1,k和1的内存地址当然是一样的,所以k==1,和1==k显然都在比较k和1的内存地址相不相等,二者并无什么区别,而且返回true。
再有,k=1,这是一个赋值表达式,把它放在if()语句里边是不符合java无法的,因为if()里边的表达式要求返回一个boolean值,显然这个k=1并不会返回任何值,只是一个简单的赋值。所以if(k=1)不存在,会报编译错误“type mismatch:cannot convert from int to boolean”。
最后,1=k,这也不符合java语法,因为1是一个常量,java是不允许将一个变量赋值给一个常量的,所以首先1=k就已经不对了,更何况if(1=k)。
解决方案三:
k==1和1==k作为逻辑判断的时候是一样的,但是有种说法是说写成1==k会比较好,因为对于k==1,很可能把逻辑等于(==)错写成赋值(=),而自己又没有察觉到,k=1在语法上又是正确的,编译不报错,造成找不到错误所在,而写成1==k,如果写错成1=k,语法上是错误的(1不是左值,不能被赋值),编译报错,很快就可以找到错误,至于k=1,这个赋值语句的逻辑值就是其被赋予的值的非零性,即是非零:真,零:假
解决方案四:
前两者是一样的,看个人编程习惯。好像大多都喜欢1==k;第三种是错误的。一个=是赋值。
解决方案五:
建议你看看书吧!系统的学习一下基本语法,不然后面的学习你会很凌乱!
解决方案六:
K=1 是赋值语句 不是比较,if(k=1) 始终为真
解决方案七:
今天写代码,遇到这样一个问题(把问题简单描述如下):short iNum = -1;if(iNum ){??? cout}else{??? cout}?结果是:true。?想了一下,考虑应该是跟负数在内存中的存储方式有关:符号为保留,取其补码。int类型的 -1(看上去是10000000 00000000 00000000 00000001)实际上在内存中 ......
答案就在这里:if(-1)