Java入门第二周:
把之前第一周学习过快基础不牢的漏洞补充了完整.如果学的再快,但不知道自己学的是什么东西也是白搭.所以我把比较难懂的名词总结一下.
存储名词区别总结(一)
《栈》和《堆》
我所理解的栈,是一栋楼的房间号码信息,而堆是房间,数据可以直接放在房间信息里,也可以放在房间里,(房间《堆》里还有自带的一些常量池,可以直接使用的不用建造)
栈:存储的都是局部变量,凡是定义在方法中的都是局部变量(方法外的是全局变量)
堆:存储的是数组和对象(其实数组就是对象)
比如主函数里的语句 int [] arr=new int [3];
主函数先进栈,在栈中定义一个变量arr,接下来为arr赋值,但是右边不是一个具体值,是一个实体。实体创建在堆里,在堆里首先通过new关键字开辟一个空间,内存在存储数据的时候都是通过地址来体现的,地址是一块连续的二进制,然后给这个实体分配一个内存地址。数组都是有一个索引,数组这个实体在堆内存中产生之后每一个空间都会进行默认的初始化(这是堆内存的特点,未初始化的数据是不能用的,但在堆里是可以用的,因为初始化过了,但是在栈里没有),不同的类型初始化的值不一样。所以堆和栈里就创建了变量和实体.
所以堆与栈的区别很明显:
1.栈内存存储的是局部变量而堆内存存储的是实体;
2.栈内存的更新速度要快于堆内存,因为局部变量的生命周期很短;
3.栈内存存放的变量生命周期一旦结束就会被释放,而堆内存存放的实体会被垃圾回收机制不定时的回收。分清栈和堆很有必要,如果分不清就没办法分辨==、equals()、compare().
堆与栈详解https://blog.csdn.net/qq_34803821/article/details/87717205
《==》和《equals()》、《compare()》和《compareTo()》
1、equals():是超类Object中的方法。equals是Object中的方法,在Object中equals方法实际"ruturn (this==obj)",用到的还是"==",说明如果对象不重写equals方法,实际该对象的equals和"=="作用是一样的,都是比较的地址值(因为"=="比较的就是地址值),但是大部分类都会重写父类的equals方法,用来检测两个对象是否相等,即两个对象的内容是否相等,例如String就重写了equals方法,用来比较两个字符串内容是否相同。
2、==:是操作符。比较的就是地址值,用于比较引用和比较基本数据类型时具有不同的功能,比较引用数据类型时,如果该对象没有重写equals方法,则比较的是地址值,如果重写了,就按重写的规则来比较两个对象;基本数据类型只能用"=="比较两个值是否相同,不能用equals
equal()和==的区别https://blog.csdn.net/qq_32521381/article/details/106188209?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165137417916781483721912%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=165137417916781483721912&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-1-106188209.142^v9^pc_search_result_cache,157^v4^control&utm_term=equals和%3D%3D的区别&spm=1018.2226.3001.4187compare()和compareTo的用法我还没用到,所以只是附加:compare()和compareTo()的比较
https://blog.csdn.net/qq_43778308/article/details/108791538?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165137491916781683915512%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=165137491916781683915512&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-8-108791538.142^v9^pc_search_result_cache,157^v4^control&utm_term=java+compare%28%29的用法&spm=1018.2226.3001.4187
1.在 Java 中,equals() 和 compareTo(), 包括compare()的实现, 在比较两个对象的时候,都会先做一个判断,判断二者是否是同一对象。这里就用到了 == ,比较的是这两个引用存的是否是同一地址
2.在 Java 中,equals()方法 x.equals(null) 返回的是false。 而 x.compareTo(null) 返回的则是NullPointerException.
注意类、对象、数组、变量和方法的储存位置对编写的时候也有很大帮助.