黑马程序员技术交流社区

标题: 一个作用域里Boolean类型为什么会引用另一个作用域里的变... [打印本页]

作者: ZHAOWEI    时间: 2014-4-29 07:54
标题: 一个作用域里Boolean类型为什么会引用另一个作用域里的变...
本帖最后由 ZHAOWEI 于 2014-5-10 17:54 编辑

class SuanshuDemo
{
        public static void main(String[] args)
        {
                //算数运算符//+,-,*,/,%,++,--;
                int a=1,b=0,c=2,d=3,e=4,f=5;
                {
                        a = 11;
                        b = 21;
                }
                {
                        boolean x;
                        x = a < b;
                        System.out.println("a="+a+",b="+b);
//为什么结果是a=11,b=21;上面的作用域怎么会跑到这个作用域来?
                        System.out.println("x(boolean)="+x);
//结果为什么是true不是false。
                }
}
}
我是传智播客0428java基础班的,0基础,现在还没开课,所以希望大神们回答一下。
作者: ZHAOWEI    时间: 2014-4-29 08:06
我是在做算数运算练习的时候遇到的这个问题,看视频上面没详细讲这个问题。在主函数里定义一个变量,在一个作用域里赋值,对另一个作用域里变量再赋值没有影响。如果这两个作用域代码运行完成后释放,那为什么还会影响到Boolean类型的判断?
作者: XinWen    时间: 2014-4-29 08:09
看作用域 是看声明的时候,而不是对这个变量操作的时候,如果按操作的时候那好几个地方多操作了,该算哪个
作者: XinWen    时间: 2014-4-29 08:15
ZHAOWEI 发表于 2014-4-29 08:06
我是在做算数运算练习的时候遇到的这个问题,看视频上面没详细讲这个问题。在主函数里定义一个变量,在一个 ...

变量声明后,内存中会有对应他的内存空间被分配, 无论你在哪里,只要可以访问到该变量, 对该变量进行操作,比如 a= 1; 实际的赋值是  给 a 表示的内存地址中填值。 所以虽然 代码块 释放了, 但 声明 a 的代码块没释放, 那 a 的内存就存在, 那 a 的值就会保持。 就像,你有一个篮子, 一个人往里装了个 苹果,然后那个人走了,但是苹果还是要在的
作者: 王峰峰    时间: 2014-4-29 08:23
  1. public class SuanshuDemo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 //算数运算符//+,-,*,/,%,++,--;
  6.                 int a=1,b=0,c=2,d=3,e=4,f=5;
  7.                 /**
  8.                  * 使用了普通代码块
  9.                  */
  10.                 {
  11.                         a = 11;
  12.                         b = 21;
  13.                 }
  14.                 /**
  15.                  * 使用了普通代码块
  16.                  */
  17.                 {
  18.                         boolean x;
  19.                         x = a < b;
  20.                         System.out.println("a="+a+",b="+b);
  21.                         //为什么结果是a=11,b=21;上面的作用域怎么会跑到这个作用域来?
  22.                                 /**
  23.                                  * 因为你的变量是定义在整个方法域里面的,而在上面的普通代码
  24.                                  * 块中修改了它的堆内存的值。从而a=11,b=21了,当然x的值也为
  25.                                  * true(11<21)。
  26.                                  */
  27.                         System.out.println("x(boolean)="+x);
  28.                         //结果为什么是true不是false。
  29.                 }
  30.         }
  31. }
复制代码

作者: ZHAOWEI    时间: 2014-4-29 08:26
XinWen 发表于 2014-4-29 08:15
变量声明后,内存中会有对应他的内存空间被分配, 无论你在哪里,只要可以访问到该变量, 对该变量进行操 ...

奥,有点明白了,我虽然不太理解,但你说的是不是这个意思,虽然那个代码块释放了,但他留下了数值?
作者: XinWen    时间: 2014-4-29 08:39
ZHAOWEI 发表于 2014-4-29 08:26
奥,有点明白了,我虽然不太理解,但你说的是不是这个意思,虽然那个代码块释放了,但他留下了数值? ...

不是他 留下了数值, 是他对内存的操作, 使内存中的内容改变了, 而内存 是会保持 数据的, 所以即使 那个人 死掉了, 他的操作的影响还是会 保持下来的。 变量的声明 就像是 声明了一个遥控器 和 一台电视,遥控器 是用来 使用电视的。 而电视则是 内存中的 某块 区域。  所谓变量的 作用域 ,就相当于谁能使用这个 遥控 器。 有个人使用了这个遥控器 换了个台 ,然后 他走了, 你说电视中 现在播的是哪个台
作者: ZHAOWEI    时间: 2014-4-29 08:45
王峰峰 发表于 2014-4-29 08:23

谢谢啦,弄明白了,




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