当前位置: 技术问答>java相关
一道模拟题--迷惑中
来源: 互联网 发布时间:2015-11-17
本文导语: boolean m = true; if(m=false) System.out.println("False"); else System.out.println("True"); 执行后的输出是什么? boolean m = true; if(m=true)//更改之处 System.out.println("False"); else System.out.println("True"); 这个执行后的输出又是什...
boolean m = true;
if(m=false)
System.out.println("False");
else
System.out.println("True");
执行后的输出是什么?
boolean m = true;
if(m=true)//更改之处
System.out.println("False");
else
System.out.println("True");
这个执行后的输出又是什么?
--------------------------------------
结果分别是"False"和"True"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
上机测试的结果,我怀疑自己的编译器错了.
能告诉我为什么吗,
焦急迷惑中!
if(m=false)
System.out.println("False");
else
System.out.println("True");
执行后的输出是什么?
boolean m = true;
if(m=true)//更改之处
System.out.println("False");
else
System.out.println("True");
这个执行后的输出又是什么?
--------------------------------------
结果分别是"False"和"True"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
上机测试的结果,我怀疑自己的编译器错了.
能告诉我为什么吗,
焦急迷惑中!
|
这个问题在考前我也糊涂了,应该是这样:
if(m=false)中是副值false给m,m原来是true,由于m是布尔类型,副值后满足if语句要求。但如果把m定义为int的话,if(m=1)这样就不行了!
比你这更不一样的是if(m=!false),这是我以前碰到的!
我今天考过了SCJP,努力吧!
if(m=false)中是副值false给m,m原来是true,由于m是布尔类型,副值后满足if语句要求。但如果把m定义为int的话,if(m=1)这样就不行了!
比你这更不一样的是if(m=!false),这是我以前碰到的!
我今天考过了SCJP,努力吧!
|
首先,if()语句中的表达式必须是布尔值,请深刻理解这一点。
if(m=false)作为以下两个语句看待就好理解了:
m=false;
if(m) //这句其实等价于 if(m==true),而此时的 m 值为 false,
//所以,流程转到 else 执行,输出为True。
第二个例子同理。
if(m=false)作为以下两个语句看待就好理解了:
m=false;
if(m) //这句其实等价于 if(m==true),而此时的 m 值为 false,
//所以,流程转到 else 执行,输出为True。
第二个例子同理。
|
是这样的,
m=true这个表达式也是有返回值的,他的返回值就是m.
你知道有这样的写法吗: a = b = 5 ,不管a,b之前是什么值,这个表达式执行了之后就是a和b都是5了。
他的执行顺序是:
1. b = 5 ,这个式子返回5
2. a = 5 , 这个5是上面返回的值。
if(m=true) 的执行顺序是:
1. m=true 这个式子的返回值是m
2. if ( 1的返回值即m ) 而这时的m 为true
当m=true时
if(m==true)的执行顺序是:
1. m == true 因为m=true所以返回true
2. if ( 1的返回值即true )
所以两个式子最后都相当于 if( true ) 所以相同
m=true这个表达式也是有返回值的,他的返回值就是m.
你知道有这样的写法吗: a = b = 5 ,不管a,b之前是什么值,这个表达式执行了之后就是a和b都是5了。
他的执行顺序是:
1. b = 5 ,这个式子返回5
2. a = 5 , 这个5是上面返回的值。
if(m=true) 的执行顺序是:
1. m=true 这个式子的返回值是m
2. if ( 1的返回值即m ) 而这时的m 为true
当m=true时
if(m==true)的执行顺序是:
1. m == true 因为m=true所以返回true
2. if ( 1的返回值即true )
所以两个式子最后都相当于 if( true ) 所以相同
|
呵呵
其实 assert 也可以这样骗人的
不过更难看出来~~
assert m=false:false;
不过只要记住 在 java 中 整个表达试的值 就是 赋值号= 左边的变量的值
因此, n=1; 为 int 类型 , b=true;为 boolean 类型
和 C++ 中一样的哈
其实 assert 也可以这样骗人的
不过更难看出来~~
assert m=false:false;
不过只要记住 在 java 中 整个表达试的值 就是 赋值号= 左边的变量的值
因此, n=1; 为 int 类型 , b=true;为 boolean 类型
和 C++ 中一样的哈
|
class mmT
{
public static void main(String[] args)
{
boolean m = true;
if(m=true)
{
System.out.println("Hello World!");
}
}
}
-------------考试可以,工作的时候,强烈建议不要写这么暧昧的语句。
{
public static void main(String[] args)
{
boolean m = true;
if(m=true)
{
System.out.println("Hello World!");
}
}
}
-------------考试可以,工作的时候,强烈建议不要写这么暧昧的语句。
|
你可以把if(m=true/false)和
m=ture/false;
if(m)
看成是等效的
java中这个m必须是boolean
c/c++中没有这个限制,int,char,long都可以
m=ture/false;
if(m)
看成是等效的
java中这个m必须是boolean
c/c++中没有这个限制,int,char,long都可以