java知识点3(null、引用相关知识(自己理解))
学习了相关博文,结合他们所说,再加上自己的理解,对引用数据类型的创建、赋值以及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、引用相关知识(自己理解))相关推荐
- 利用JAVA中关于继承的相关知识求得圆柱体体积并输出
利用JAVA中关于继承的相关知识求得圆柱体体积并输出 Write a program: 1)Define a Circle class and a Cylinder class, which is d ...
- 复习Java第二个项目仿QQ聊天系统 03(两种通信类、登录以及注册功能完善) Java面试题并发编程相关知识生活【记录一个咸鱼大学生三个月的奋进生活】025
记录一个咸鱼大学生三个月的奋进生活025 复习Java(仿QQ聊天系统03两种通信类.登录以及注册功能完善) TcpSocket类(与服务器进行通信) Server类(服务器类) TcpMessage ...
- Java入门与实践——计算机相关知识科普
计算机相关知识科普 Computer: 全称是电子计算机,俗称电脑, 能够按照程序运行,自动.高速处理海量数据的现代化智能电子设备 由硬件和软件组成 常见的形式有台式计算机.笔记本计算机.大型计算机( ...
- 【JAVA中String类的相关知识】
文章目录 一.创建字符串 1.1创建字符串时的内存布局 二.字符串比较相等 2.1equals方法 三.字符串常量池 3.1实例化操作的内存布局 3.2intern手动入池 四.理解字符串不可变 4. ...
- linux定时任务定向到空,Linux 定时任务下 /dev/null 21 相关知识说明
今天再使用Laravel任务调度的时候,需要在linux的cron添加如下代码:php /path/to/artisan schedule:run 1>> /dev/null 2>& ...
- Linux下/dev/null 21 相关知识说明
在学习Linux的过程中,常会看到一些终端命令或者程序中有 ">/dev/null 2>&1" 出现,由于已经遇到了好几次了,为了理解清楚,不妨花点时间百度或者 ...
- Linux下 /dev/null 21 相关知识说明
在学习Linux的过程中,常会看到一些终端命令或者程序中有">/dev/null 2>&1 "出现,由于已经遇到了好几次了,为了理解清楚,不妨花点时间百度或者g ...
- java中IO流的相关知识
目录 一.背景 二.IO流的分类 三.字符流操作相关代码示例 1.FileReader读取文件内容 2.FileWriter向文件写数据 3.实现文件内容复制 4.注意事项 5.利用try-catch ...
- Linux Shell下”/dev/null 21“相关知识说明
0:表示键盘输入(stdin) 1:表示标准输出(stdout),系统默认是1 2:表示错误输出(stderr) command >/dev/null 2>&1 & = ...
最新文章
- skywalking原理_Skywalking系列博客6手把手教你编写 Skywalking 插件
- 4、删除数据表(DORP TABLE语句)
- OpenCV中Mat的属性
- 多进程fork()函数
- GitLab-CI与GitLab-Runner
- JS代码实例:实现随机加载不同的CSS样式
- 小端法、大端法、网络字节转序
- 新冠肺炎病毒(Covid-19)检测系统
- 拓端tecdat|Python对商店数据进行lstm和xgboost销售量时间序列建模预测分析
- 反驳生命的起点是rna_科学家提出了生命分子的手性起源新假说,源自宇宙射线...
- 西门子scout中文手册_西门子LOGO!是什么?它有哪些应用?
- Hyperledger Fabric CA中文文档
- 颜色对照表(二)(16进制、RGB、CMYK、HSV、中英文名)
- HTML布局之grid布局
- 阿朱:研发管理者必读文章
- 如何在HTML网页里添加CSS边框,css如何设置边框?
- autojs ui界面漂亮模板2
- Python技能树的测评和CSDN Markdown编辑器的测评
- 【SpringBoot注解-4】:@Target、@Retention、@Documented注解简介
- 【C语言】通讯录实现
热门文章
- PHP 8.0 源码编译安装 JIT 尝鲜
- linux内核源码 -- list链表
- linux下c 调用python,在Linux下使用python ctypes调用io\u submit
- Rabbtmq 消费端-幂等性保障
- java面试之HashMap延伸出来的--什么是ConcurrentHashMap?
- vuex:弄懂mapState、mapGetters、mapMutations、mapActions
- html中metaf属性ormat-detection的意义
- flexible.js 移动端自适应方案
- Java中list对象的三种遍历方式
- 一直处于building “XXX”gradle project info