A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 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基础,现在还没开课,所以希望大神们回答一下。

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1 神马都是浮云

查看全部评分

7 个回复

倒序浏览
我是在做算数运算练习的时候遇到的这个问题,看视频上面没详细讲这个问题。在主函数里定义一个变量,在一个作用域里赋值,对另一个作用域里变量再赋值没有影响。如果这两个作用域代码运行完成后释放,那为什么还会影响到Boolean类型的判断?
回复 使用道具 举报
看作用域 是看声明的时候,而不是对这个变量操作的时候,如果按操作的时候那好几个地方多操作了,该算哪个
回复 使用道具 举报
ZHAOWEI 发表于 2014-4-29 08:06
我是在做算数运算练习的时候遇到的这个问题,看视频上面没详细讲这个问题。在主函数里定义一个变量,在一个 ...

变量声明后,内存中会有对应他的内存空间被分配, 无论你在哪里,只要可以访问到该变量, 对该变量进行操作,比如 a= 1; 实际的赋值是  给 a 表示的内存地址中填值。 所以虽然 代码块 释放了, 但 声明 a 的代码块没释放, 那 a 的内存就存在, 那 a 的值就会保持。 就像,你有一个篮子, 一个人往里装了个 苹果,然后那个人走了,但是苹果还是要在的
回复 使用道具 举报
  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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
XinWen 发表于 2014-4-29 08:15
变量声明后,内存中会有对应他的内存空间被分配, 无论你在哪里,只要可以访问到该变量, 对该变量进行操 ...

奥,有点明白了,我虽然不太理解,但你说的是不是这个意思,虽然那个代码块释放了,但他留下了数值?
回复 使用道具 举报
XinWen 中级黑马 2014-4-29 08:39:53
7#
ZHAOWEI 发表于 2014-4-29 08:26
奥,有点明白了,我虽然不太理解,但你说的是不是这个意思,虽然那个代码块释放了,但他留下了数值? ...

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

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报

谢谢啦,弄明白了,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马