java吧 关注:1,263,114贴子:12,764,286

这个很简单?

只看楼主收藏回复

int a=12;
这句话是说 变量 a 指向了一块内存空间, 这个内存空间存着数据:12
如果,这时候在加一句呢?就是:
int a=12;
a=22;
那么a=22,是否是将内存空间的12 改成 22,还是直接在开辟一个内存空间地址存储22呢?
为了验证我的推论,我做了这样一个实验。
int a=12;
int b=a;
b=22;
System.out.print(a);
System.out.print(b);
输出:12 22
说明了一个问题,是直接开辟了一个内存空间地址!


1楼2014-08-03 09:47回复
    你int b了自然开辟了b的空间


    来自Android客户端2楼2014-08-03 09:56
    收起回复
      2025-06-07 18:52:27
      广告
      int 赋值 指向常量池


      IP属地:广东来自Android客户端3楼2014-08-03 10:05
      回复
        你应该理解错了
        int a = 12;
        a = 22;
        如果代码是在函数里
        12,22是写死在代码里的,a对应的是线程栈的一个地址。我将上面代码用C写后,编译成可执行文件,然后反汇编得到
        400531: 48 83 ec 10 sub $0x10,%rsp
        400535: c7 45 fc 0c 00 00 00 movl $0xc,-0x4(%rbp)
        40053c: c7 45 fc 16 00 00 00 movl $0x16,-0x4(%rbp)
        其中%rsp是线程栈的一个标量地址,%rbp-4后,就是a变量的地址,显然运行的时候是将
        常量0xc(十六进制的12)传输到a然后
        将常量0x16(十六进制的22)传输到a


        4楼2014-08-03 11:40
        收起回复
          奇葩的理解


          IP属地:上海5楼2014-08-03 11:42
          回复
            你重新看一下代码 从上往下看 就能看出你的逻辑哪里有问题了


            IP属地:福建来自Android客户端6楼2014-08-03 12:21
            回复
              why are you so diao


              IP属地:广东7楼2014-08-03 12:24
              回复
                看不出证明了什么


                来自Android客户端8楼2014-08-03 12:31
                回复
                  2025-06-07 18:46:27
                  广告
                  打印出hash不就成了


                  IP属地:广东来自Android客户端9楼2014-08-03 12:36
                  回复
                    y r u so diao


                    IP属地:浙江来自iPhone客户端10楼2014-08-03 12:52
                    回复
                      好深层次


                      IP属地:广东来自Android客户端11楼2014-08-03 12:56
                      回复
                        继续吃药


                        IP属地:河北来自Android客户端12楼2014-08-03 13:40
                        回复
                          int a=12;
                          a=22;


                          IP属地:上海13楼2014-08-03 14:23
                          收起回复
                            你这样肯定理解错了你给A开辟了空间
                            你又定义了INT B 你B=A ;这个表示你B开辟了空间只是B拷贝了A空间的值,当你更改了B的赋值后,那么你只是把B中原先A的值 更改了新的定义值,不是什么A重新开辟了空间,
                            上一句的逻辑是
                            A空间12 更改为22
                            下一个是 A空间 12
                            B空间调用A空间的值12 然后更改为22,两个意思完全不一样


                            IP属地:浙江14楼2014-08-03 14:45
                            回复
                              2025-06-07 18:40:27
                              广告
                              12 22都是常量,常量是不可变的,所以你只能修改变量a b的值
                              抛开内存模型,你可以认为“变量a引用了整型值12”,但是因为12是常量所以你无法修改它本身,你只能将a重新引用22,而这不会对b的引用造成任何影响,b仍然引用了12


                              IP属地:广西15楼2014-08-03 15:01
                              回复