Java中变量分为普通原始变量(int char float等)和对象

一“=”

(1)普通原始变量

普通原始变量的声明和赋值语句例如以下

            int a=3;
int b=a;

此时a和b都为普通原始变量。这里的内存使用情况例如以下

第一行在内存中开辟一块内存(大小为int所占的大小)。并将这块内存用a标示。这时a的值的就是这块内存的内容。第二行b=a就是在内存中再开一块内存(大小为int所占的大小)可是这块内存的地址和第一行的地址是不一样的。可是软件人员也不知道所以不能直接使用内存。

此时将a中的内容拷贝一份然后填充在b所表示的内存块中。运行完这两行代码后结果就是

开辟两块不同的内存,可是这两块内存中的内容是同样的。



(2)包装器和对象

如果A是一个类。如今有例如以下代码

    A a;
a=new A();
A b=a;

这时候第一行代码就是在内存中开辟一块内存。并把这块内存标记为A类的引用,可是这块内存中的内容为null,表示这个A类的引用并不指向不论什么内存。

第二行代码就是先开辟一块内存。这块内存中的大小就是创造出A类一个默认对象的大小,然后创建一个A类的对象,将这个对象放入到这块内存中。然后再把这块内存的地址填充到引用变量a的内存中。

第三行代码就是先开辟一块内存。这块内存类型为A类对象引用并标记为b。然后将a内存中内容拷贝一份放到b内存中,所以b的引用也是第二行代码中创建的存放A类的对象的那块内存。

这三行代码运行完后。在内存中开辟了三块内存块。第一个内存块用a标示。类型为A类对象的引用,第二个内存块没有名字,类型为A类的对象,第三个内存块用b标示。类型也为A类对象的引用。

二 “==”

(1)普通原始变量

        int a=3;
int b=3;
System.out.println(a==b);

此时在内存中开辟了两块内存块,被标示为a和b,内容都是3。这时候a==b比較的就是两块内存中的内容。

输出为true

(2)包装器和对象

如果有A类

        A a=new A();
A b=new A();
A c=a;
System.out.println(a==b);
System.out.println(a==c);
System.out.println(b==c);

第一行代码就是a为一块内存块,内容为还有一块A类对象内存块的地址(如果为x)。

第二行代码就是b为一块内存块,内容为还有一块A类对象内存块的地址(如果为y)。

第三行代码就是c为一块内存块,内容为和a所指向地址同样的内存块的地址(x)。

a==b推断的就是a内存块和b内存块中的内容,由于指向两块内存块的地址不同,所以第七行输出false

a==c推断的就是a内存块和c内存块中的内容,由于存放的都是第一行代码所产生的A类对象的内存块的地址。所以是同样的,输出true

b==c推断的是b内存块和c内存块中的内容,可是这两块的内存块中的内容是不同A类对象内存块的地址。所以输出false.

最新文章

  1. outerHTML
  2. SharePoint Foundation 2013 安装出错
  3. EJB初识(通熟易懂)
  4. Eclipse不能自动编译 java文件
  5. Magnifier.js - 支持鼠标滚轮缩放的图片放大镜效果
  6. MySQL mac 安装
  7. 在用到select2时,临时抱佛脚学习了一下
  8. VisualStudio 调试不提示调试错误
  9. 黑白棋游戏 (codevs 2743)题解
  10. Flux工作流
  11. javabeans的运用
  12. java 二维码原理以及用java实现的二维码的生成、解码(转)
  13. python import xxx 与 from xxx import xx 模块引入的区别
  14. ABP官方文档翻译 6.2.1 ASP.NET Core集成
  15. mybatis源码之StatementHandler
  16. 构建基于Netty 的HTTP/HTTPS 应用程序
  17. Ubuntu16.04安装MySQL
  18. [PHP] 算法-二叉树的子结构判断的PHP实现
  19. win2008R2管理员密码修改文档
  20. Spark:几种给Dataset增加列的方式、Dataset删除列、Dataset替换null列

热门文章

  1. Android --------------------ActionBar 与 ViewPager 和 ActionTab 切换 的源代码实现
  2. IIS启用GZip压缩的详细教程(图文)
  3. 【Android】5.5 状态切换(Switch)和评级条(RatingBar)
  4. 无线路由器硬件配置參数 NetGear篇
  5. Linux环境下搭建测试环境(LAMP详细说明)
  6. ubuntu tftp 配置
  7. 将struts的jar包拷贝到WEB-INF/lib导致eclipse中配置好的javadoc失效
  8. Python获取时间范围内日期列表和周列表的函数
  9. ajaxupload 异步上传工具
  10. 使用寄存器点亮LED——前言基础知识