学习了相关博文,结合他们所说,再加上自己的理解,对引用数据类型的创建、赋值以及null等进行了总结。仅为自己理解,可能会有错误。

1、声明一个对象不赋值与赋值为null的区别

假如有一个Person类声明如下:

public class Person{//成员变量
  String name;int age;
}  

  (1)如果是成员变量,比如Person类的name或者age字段,不手动赋值的时候java会给个默认值,和变量的类型对应,string类被赋值为null,age类被赋值为0,这种情况发生                  在如 Person student = new Person();时,定义了一个Person类的student对象,首先java自动将student对象中的name和age设置为null与0。如果没有显示声明并且构                  造函数也没有对其赋值,那么name和age则就为null和0。

(2)非成员对象时。

记住一句话:java中对象引用放在栈中,对象的实例放于堆中,一个对象要是只声明不赋值,则只会在内存的栈区创建引用,堆中并无此引用的指向。

1 Person student ;
2 Person student = null;

二者都在栈中存储了student的引用,且都没有在堆中创建对象的实例。

可以将Person student = null看成是student指向null,如右边的图。因为将Person student = null看成student指向null,因此相当于完成初始化,编译不会报错。

2、Person student = new Person();的创建过程

可拆分成 Person student;  //在栈中开辟一块空间,存储student的引用,但此时引用并不指向堆中对象,及没有建立联系。

student = new Person();//在堆中开辟一块空间,存储Person类对象的实例,并且将name、age初始化为null和0,随后进行对象的显示触发(如果有),然后调用                                                                        构造方法(如果构造方法中有对name 和age的赋值,则会覆盖显示触发时的值和初始化的值。赋值顺序为:默认值----显示触发---构造                                                                          方法赋值)。赋值之后,将对象的地址付给栈中的引用(student)。

3、引用之间相互赋值

Person p1 = new Person();
Person p2 = new Person(); p1 = p2;

    一个引用赋值给另一个引用,相当于两个引用指向了堆中同一个对象,而堆中另一个对象则为垃圾,会被java垃圾机制回收。

以上为自己的理解,仅供参考,若有错误,烦请指证!!!

转载于:https://www.cnblogs.com/shanchuang-119/p/10262188.html

java知识点3(null、引用相关知识(自己理解))相关推荐

  1. 利用JAVA中关于继承的相关知识求得圆柱体体积并输出

    利用JAVA中关于继承的相关知识求得圆柱体体积并输出 Write a program: 1)Define a Circle class and a Cylinder class, which is d ...

  2. 复习Java第二个项目仿QQ聊天系统 03(两种通信类、登录以及注册功能完善) Java面试题并发编程相关知识生活【记录一个咸鱼大学生三个月的奋进生活】025

    记录一个咸鱼大学生三个月的奋进生活025 复习Java(仿QQ聊天系统03两种通信类.登录以及注册功能完善) TcpSocket类(与服务器进行通信) Server类(服务器类) TcpMessage ...

  3. Java入门与实践——计算机相关知识科普

    计算机相关知识科普 Computer: 全称是电子计算机,俗称电脑, 能够按照程序运行,自动.高速处理海量数据的现代化智能电子设备 由硬件和软件组成 常见的形式有台式计算机.笔记本计算机.大型计算机( ...

  4. 【JAVA中String类的相关知识】

    文章目录 一.创建字符串 1.1创建字符串时的内存布局 二.字符串比较相等 2.1equals方法 三.字符串常量池 3.1实例化操作的内存布局 3.2intern手动入池 四.理解字符串不可变 4. ...

  5. linux定时任务定向到空,Linux 定时任务下 /dev/null 21 相关知识说明

    今天再使用Laravel任务调度的时候,需要在linux的cron添加如下代码:php /path/to/artisan schedule:run 1>> /dev/null 2>& ...

  6. Linux下/dev/null 21 相关知识说明

    在学习Linux的过程中,常会看到一些终端命令或者程序中有 ">/dev/null 2>&1" 出现,由于已经遇到了好几次了,为了理解清楚,不妨花点时间百度或者 ...

  7. Linux下 /dev/null 21 相关知识说明

    在学习Linux的过程中,常会看到一些终端命令或者程序中有">/dev/null 2>&1 "出现,由于已经遇到了好几次了,为了理解清楚,不妨花点时间百度或者g ...

  8. java中IO流的相关知识

    目录 一.背景 二.IO流的分类 三.字符流操作相关代码示例 1.FileReader读取文件内容 2.FileWriter向文件写数据 3.实现文件内容复制 4.注意事项 5.利用try-catch ...

  9. Linux Shell下”/dev/null 21“相关知识说明

    0:表示键盘输入(stdin) 1:表示标准输出(stdout),系统默认是1  2:表示错误输出(stderr) command >/dev/null 2>&1 &  = ...

最新文章

  1. skywalking原理_Skywalking系列博客6手把手教你编写 Skywalking 插件
  2. 4、删除数据表(DORP TABLE语句)
  3. OpenCV中Mat的属性
  4. 多进程fork()函数
  5. GitLab-CI与GitLab-Runner
  6. JS代码实例:实现随机加载不同的CSS样式
  7. 小端法、大端法、网络字节转序
  8. 新冠肺炎病毒(Covid-19)检测系统
  9. 拓端tecdat|Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析
  10. 反驳生命的起点是rna_科学家提出了生命分子的手性起源新假说,源自宇宙射线...
  11. 西门子scout中文手册_西门子LOGO!是什么?它有哪些应用?
  12. Hyperledger Fabric CA中文文档
  13. 颜色对照表(二)(16进制、RGB、CMYK、HSV、中英文名)
  14. HTML布局之grid布局
  15. 阿朱:研发管理者必读文章
  16. 如何在HTML网页里添加CSS边框,css如何设置边框?
  17. autojs ui界面漂亮模板2
  18. Python技能树的测评和CSDN Markdown编辑器的测评
  19. 【SpringBoot注解-4】:@Target、@Retention、@Documented注解简介
  20. 【C语言】通讯录实现

热门文章

  1. PHP 8.0 源码编译安装 JIT 尝鲜
  2. linux内核源码 -- list链表
  3. linux下c 调用python,在Linux下使用python ctypes调用io\u submit
  4. Rabbtmq 消费端-幂等性保障
  5. java面试之HashMap延伸出来的--什么是ConcurrentHashMap?
  6. vuex:弄懂mapState、mapGetters、mapMutations、mapActions
  7. html中metaf属性ormat-detection的意义
  8. flexible.js 移动端自适应方案
  9. Java中list对象的三种遍历方式
  10. 一直处于building “XXX”gradle project info