黑马程序员技术交流社区

标题: 请问这两个题的=和==的区别为什么? [打印本页]

作者: Ak-47    时间: 2016-3-23 23:06
标题: 请问这两个题的=和==的区别为什么?
boolean b = true;

                if(b==false)
                        System.out.println("a");
                else if(b)
                        System.out.println("b");
                else if(!b)
                        System.out.println("c");
                else
                        System.out.println("d");
-----------------------------------------------------------------------------
boolean b = true;

                if(b=false)
                        System.out.println("a");
                else if(b)
                        System.out.println("b");
                else if(!b)
                        System.out.println("c");
                else
                        System.out.println("d");
我觉得if(b=false)作用域就是这个括号内就完了啊?求解


作者: アカツキ    时间: 2016-3-23 23:18
一个是判断b==false   一个是赋值b=false
作者: xingxiansheng    时间: 2016-3-23 23:26
b为基本数据类型,就是内存的一块空间,对其赋值,会改变其内容值,但是要注意其作用域;其次,=是赋值符,而==是比较运算符
作者: 小青年oh    时间: 2016-3-23 23:29
第一个 ==是判断语句,判断b的值和false是否相等;然后执行下边语句;
第二个是赋值,把false赋值给b,false本事就是布尔型,if属于判断语句,相当于给if返回的是false, 执行不到。
作者: zshhappy    时间: 2016-3-23 23:30
=是把等号右边的值赋给等号左边,==是判断等号左右两边是否相等
作者: xingxiansheng    时间: 2016-3-23 23:32
b的作用域是大括号{}中,即局部变量,若这个变量和语句在一个{}里,则b在整个语句里面都会起作用
作者: naiheqiao168    时间: 2016-3-23 23:52
=是赋值运算符,进行赋值,将=右边的值赋给左边变量;==是比较运算符,进行两个值的对比,多用于if(a==b){}判断语句
作者: Ak-47    时间: 2016-3-24 00:03
if(b=false),作用域多大啊,能管几句话啊
作者: gxc6073    时间: 2016-3-24 00:06
=是赋值   == 是判断相等
作者: 北极1989    时间: 2016-3-24 00:36
=是赋值符号,把左边的值赋值给右边的变量
作者: 北极1989    时间: 2016-3-24 00:45
= 是赋值运算符,他的作用是把右边的数据赋值给左边的变量
== 是逻辑(关系)运算符,用来判断左边和右边的数据是否相等,得出的结果是Boolean型,要么true,要么false

你提供的这连个if语句中,
第一个语句 Boolean型变量b首先被初始化为 true,往下执行,先判断 true==false,(判断true是否和false相等,)这明显是false,所以跳过这循环体,走到下面的第一个else if中,因为,b 初始化的时候已经赋值为true所以这个语句成立,然后就执行该语句对应的输出语句,输出结果为b

而第二个语句中,b在第一个if语句中,被赋值,新的值为false,也就是说,此处的if(b=false )实际上就是 if (false),明显不会执行这个循环体,会跳到下面的else if ,第一个else if语句,相当于是,else if(false),因为false,所以也不会执行他对应的循环体,继续往下走,到第二个else if,此处相当于  else if ( ! false ),也就是 else if ( true ),这里是true,就会执行他对应的循环体,所以输出结果为C
作者: fans0414    时间: 2016-3-24 00:57
上面的==是逻辑运算符 把b=ture这个值带进来 就是 if(true==false) 结果是false所以条件不满足 跳过
而下面的= 是赋值运算符 虽然先前定义了b=true 但(b=false)又把b的值用false 把原先的true给覆盖了。虽然条件不满足 但已经改变了b的初始化值 读后边的判断时 其实就是用b=false了
作者: 278008379    时间: 2016-3-24 12:08
赋值与比较的区别,你是真不会还是假不会?
作者: houxiaoxiong    时间: 2016-3-24 12:51
if(里面只要是 false 或者 true)就可以    b =  false  其实就是false
作者: jia190917585    时间: 2016-3-24 16:21
一个判断,一个赋值
作者: 大叔的青葱    时间: 2016-3-24 20:54
一个是比较运算符,一个是赋值运算符。比较运算符的结果是false或者true,赋值运算符=是将左边的值赋给右边。
作者: 赵浩霖    时间: 2016-3-24 21:46
=是赋值运算符,用来赋值的;==是比较运算符,是用来比较左右两边的数是否相等;以后还会用到个equals是比较两个String型变量里的美容是不是一样的。亲几天我就被==和equals卡住了
作者: 飞扬的king    时间: 2016-3-24 21:53
==是判断    =是赋值
作者: Lee.Yongsong    时间: 2016-3-24 22:12
一个是判断,一个是附值,表达的意思不同!
作者: naiheqiao168    时间: 2016-3-24 23:06
b==false是进行判断   b=false是将false赋值给b
作者: D.TF    时间: 2016-3-25 00:38
我看上面是这样说的。我看了看好像也是这样的
第一个 ==是判断语句,判断b的值和false是否相等;然后执行下边语句;
第二个是赋值,把false赋值给b,false本事就是布尔型,if属于判断语句,相当于给if返回的是false, 执行不到。
主要是=是赋值,而==才是判断语句等于
作者: Ak-47    时间: 2016-3-25 01:25
那个赋值不是也算是局部if()括号里面的局部变量啊,出了大括号怎么还有用啊
作者: NoHarry    时间: 2016-3-25 09:15
==是判断两边的是否一样,=是右边给左边赋值
作者: skxy2016    时间: 2016-3-25 13:25
首先=和==跟作用域没有关系,你这两段代码分别输出的是b和c,这使你误认为是=和==的作用域差异导致,第一段代码b==false是比较,b初始化为true,所以判断结果为false,只能执行else if(b)的代码,结果为true所以输出b;
第二段代码,将false赋值给b,此时b就是false,当然就不能执行第一条语句,往下执行到else if(b),此时b还是false,第二条语句也不执行,接着执行到else if(!b),此时运算完后b就变成true,当然就执行输出c了。
作者: 304305347    时间: 2016-3-25 21:49

==是比较运算符,=是赋值运算符,比较运算符的结果是false或者true,赋值运算符是将左边的值赋给右边,这两个类型都不一样
作者: 梧桐树上的男人    时间: 2016-3-25 21:59
一个是关系运算符,一个是赋值运算符
==的作用是判断两边是否相等,=的作用是把右边的操作结果赋值给左边
作者: wang18317850573    时间: 2016-3-25 22:50
b = true;
  if(b=false)
把 b = true;赋值给 if(b=false) .输出的是b=false.所以选择 (!b)
作者: wang18317850573    时间: 2016-3-25 22:52

b = true;
  if(b=false)
把 b = true;赋值给 if(b=false) .输出的是b=false.所以选择 (!b)
作者: Ak-47    时间: 2016-3-26 01:38
谢谢各位大侠了,收下我的膝盖吧
作者: 腾龙3158    时间: 2016-3-26 03:00
if语句如果有大括号,那么作用域就是整个大括号以及后面的else 语句;如果没有大括号,那么作用域就是最近的一条语句,并且只能跟一条语句,此时作用域可达到else 语句,否则不能再跟else 语句。
作者: 沿途的风景    时间: 2016-3-26 14:25
=号是赋值运算符 == 是比较运算符
作者: 就是我    时间: 2016-3-26 16:22
b=* 是赋值,会影响b的实际值,b本身作为判断条件
b==*是判断,不会影响b本身,整个词句来充当一个判断条件
作者: 孙继雄    时间: 2016-3-26 19:15
= 是一个赋值运算符,是用来给变量赋值的
== 是一个比较运算符,是用来判断两边是否相等的,基本类型比较的是值,引用类型比较的是地址值
作者: lyoivneg    时间: 2016-3-26 19:38
if(b=false)   if(true){  结果是真走这里  执行}  else  { 判断是假 走这里}  依次顺序执行
作者: xiaochenu    时间: 2016-3-26 20:03
第一个里if(b==false)是指b是否等于false,实际上不是所以a不会输出,然后if(b)成立,因为b是true,所以输出b,

第二个b=false是把右边的false赋值给了b,这时候b的值是false,只有!b成立所以输出c
作者: luomoss    时间: 2016-3-26 22:41
=是赋值,==是比较。b=false就是将false赋予b,if(b==false)的意思是如果b等于false。
作者: lennycxy    时间: 2016-3-26 23:08
第二个if(b=false) ,直接个b赋值false,后面当然输出c了,第一个选b
作者: ckm666666    时间: 2016-3-26 23:25
naiheqiao168 发表于 2016-3-23 23:52
=是赋值运算符,进行赋值,将=右边的值赋给左边变量;==是比较运算符,进行两个值的对比,多用于if(a==b){}判断 ...

活捉同班同学一枚
作者: zq019633    时间: 2016-3-26 23:28
houxiaoxiong 发表于 2016-3-24 12:51
if(里面只要是 false 或者 true)就可以    b =  false  其实就是false

打印出什么
作者: 李永昌    时间: 2016-3-26 23:39
判断和赋值的区别
作者: Ak-47    时间: 2016-3-27 00:39
楼上的意思基本表达都一样,但是if(b=false)赋值语句出了,这句话执行完毕,到了下面的else  if  ,这个赋值还管用吗?
作者: Lingxin    时间: 2016-3-27 01:04
if(b==false)
就b 和false相等

if(b=false)
就是把false 赋值给b啦


谢谢,不知道,这样回答可以理解吗?

作者: Ak-47    时间: 2016-3-27 01:11
我知道是
if(b=false)
就是把false 赋值给b啦,但是找个if执行完毕之后,到了else  if (b),找个b是开始的那个b,还是if(b=false)的b?
作者: 「AτS」    时间: 2016-3-27 15:15
if(b=false)这里面这个赋值动作,直接就将前面的b的值修改了,你第二份代码就相当于下面这个代码,除非你后面再给b赋值,否则后面一直就是false.
  1. boolean b = true;
  2. b =false;
  3.                 if(b)
  4.                         System.out.println("a");
  5.                 else if(b)
  6.                         System.out.println("b");
  7.                 else if(!b)
  8.                         System.out.println("c");
  9.                 else
  10.                         System.out.println("d");
复制代码

作者: humility    时间: 2016-3-28 13:23
Ak-47 发表于 2016-3-24 00:03
if(b=false),作用域多大啊,能管几句话啊

这个是把false赋值给b,是永远正确的,执行完这一句就不会执行下面的判断了
作者: wxf468907066    时间: 2016-3-28 19:27
=是赋值运算符,是把
作者: 犹豫的烤肉拌饭    时间: 2016-3-29 00:07
=是赋值运算符 ; == 是比较运算符.
作者: 千年白狐    时间: 2016-3-29 16:20
=此是赋值语句,比如a=2,是把2赋值给a;而==是比较运算符,用于对象引用的比较常见
作者: yc01    时间: 2016-3-30 23:57
这多人 回复 还没解决?
作者: Ak-47    时间: 2016-3-31 01:12
听楼上的大婶们都说=是赋值运算符,==是比较运算符,那这if(b=false)为撒就能执行到第三句呢?有谁知道,为撒=赋值就能一直匹配下去啊,而不是第一句执行就完毕啊
{:2_30:}
作者: vvvisa    时间: 2016-3-31 10:04
赋值和判断
作者: adomwon    时间: 2016-3-31 15:28
if小括号里放的是判断语句,不是赋值语句
作者: zxy5853    时间: 2016-4-4 19:08
==是判断符,结果是布尔型,true或者false;=是赋值运算符,即把一个值赋给一个变量。
作者: naiheqiao168    时间: 2016-4-5 21:52
ckm666666 发表于 2016-3-26 23:25
活捉同班同学一枚

牛啊,都22 积分了
作者: caoshengwei    时间: 2016-4-5 23:59
不是这样的,因为 b= false 是进行赋值的,此时就是if(false),肯定不会进来的,会向后执行
作者: wanbing522    时间: 2016-4-7 17:48
=是赋值,==是比较是boolean类型相等是ture不等为false
作者: 15614014298    时间: 2016-4-7 22:25
=是赋值运算符,让左边的值变成右边的
==是判断运算符,是真正的等于,判断左右是否相等
作者: AAAheilong    时间: 2016-4-16 22:18
=是赋值运算符,==是逻辑判断运算符
b=false是把false赋值给b,    而b==false则是判断b是否等于false,是则返回true,否则返回false.
作者: 小K哥    时间: 2016-4-18 07:58
b==false这个是关系运算符,它是判断b等不等于false,如果等于,这表明它是真的,则输出下面的语句,但现在的b是true,所以它应该输出 b 。b=false是赋值运算符,本来b是true,现在赋false给它,那么b的值就是false而不是true,所以它应该是输出 c 。
作者: 小K哥    时间: 2016-4-18 08:01
b==false这个是关系运算符,它是判断b等不等于false,如果等于,这表明它是真的,则输出下面的语句,但现在的b是true,所以它应该输出 b 。b=false是赋值运算符,本来b是true,现在赋false给它,那么b的值就是false而不是true,所以它应该是输出 c 。
作者: 东方乔恩    时间: 2016-4-22 22:57
第一个就是比较两个数是否相等,不用多说了.
但是第二个是把false赋值给b了,之后判断b是真还是假,
和因为boolean b=true;这个声明是在和if,else同一个方法中的,所以他的生命周期就是是这个函数的生命周期
作者: 小红花    时间: 2016-4-23 22:18
赋值;比较;

作者: 逆水z行舟    时间: 2016-4-23 23:22
=是 赋值运算符  将false赋值给b   ==是比较运算符  判断b和false是否相等 相等返回true  不等为false
作者: 1191065242    时间: 2016-5-1 15:56
=是给变量赋值,==是两边进行值的比较如果是一样的就等于true否则就是false
作者: chengxiankun    时间: 2016-6-4 09:27
=是赋值操作   ==是判断值是否相等并且检查类型是否相同
作者: 276250281    时间: 2016-6-12 20:55
=是赋值运算符,就是把=右边的赋值给=左边,
==是比较运算符,就是判断两边是否相等,运算结果只有真于假
作者: linguoqun    时间: 2016-7-26 00:06
楼主,你好,
根据您提出的问题,本人为您亲自调试代码,以便让您更好地理解,你的代码可以写成以下形式,
public class Person
{

        public static void main(String args[])
        {
               
                                boolean b1=true;

                            if(b1==false)
                                    System.out.println("a");
                            else if(b1)
                                    System.out.println("b");
                            else if(!b1)
                                    System.out.println("c");
                            else
                                    System.out.println("d");
                        //-----------------------------------------------------------------------------
                        boolean b2 = true;

                            if(b2=false)
                                    System.out.println("a");
                            else if(b2)
                                    System.out.println("b");
                            else if(!b2)
                                    System.out.println("c");
                            else
                                    System.out.println("d");
                        //我觉得if(b=false)作用域就是这个括号内就完了啊?求解
                        //}

                        }
}
上面的代码,只是把您原来声明的两个变量b区分了一下,一个是b1,一个是b2,这样你理解起来就不会混乱。然后,我们来看输出的结果:
程序的输出结果是:
b
c
为什么是这样的结果呢?
很简单,首先我们来理解两个符号的含义:
"=="以及"="
"=="两个等于号组成的符号,在程序的作用是起判断的作用,即判断==号左右两边的值是否相等。如果相等,则返回1,如果不相等,则返回0;
"="一个等于号,在程序的作用是起赋值的作用,即将等号右边的值赋给左边。
弄清了这两个概念之后,我们来分析程序就不难了。
首先,我们声明了一个布尔型变量b1的值等于true.
if 后面括号的内容是判断变量b1是否等于false.很明显,我们在上一行代码已经将b1初始化为true 。所以if括号里面的内容不成立。然后就往下执行else if语句。因为b1的值不变,仍然是true,所以这个else if (b)括号中的内容为真,是成立的,所以执行紧跟着的一句代码,所以就打印字符串b了。
然后,我们来分析下一段代码:同样,一开始初始化一个布尔型变量b2=  true.
刚才已经说过,一个等号"="代表赋值运算,是将右边的值赋给左边,所以这时变量b2的值被改变了。b2的值由之前的true变成了false.所以if语句括号的内容不成立,然后继续判断下面esle if 括号中的内容是否为真,很明显,也不成立。再判断下一个else if (!b)这一句代码括号中的内容是否为真。这里,聪明的楼主会发现,它用了取反运算符!,即由原来的false变成了true.所以,会打印字符串c。
说了很多了,希望楼主能看明白。有点长,只为楼主好理解。纯手打的,满意请采纳,谢谢!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2