J SE基础笔记4

来源:互联网 发布:青海省水电数据 编辑:程序博客网 时间:2024/06/06 00:32
关于相等性的比较(==):
1.对于原生数据来说,比较的是左右两个的值是否相等。
2.对于引用类型来说,比较的是指向的对象是否为同一个。

Object类解析:
equals方法:该方法定义在Object类中。它判断调用该方法的引用和参数引用是否指向同一个对象。
这个方法在String类中被重写。

String类解析:
equals方法被重写,在String类中,这个方法判断两个字符串的值是否相等。
String是常量,一旦生成对象就无法改变。
String + String 会生成一个新的对象。
intern方法:返回在String Pool中与调用该方法的字符串对象的值相同的对象的引用。


String Pool(字符串池):
字符串池在内存栈中。
用字面量给字符串赋值的时候,会先检查字符串池里有没有该与字面量值相同的字符串对象。如果有,将引用指向该对象。如果没有,就新生成一个与该值相等的新字符串对象,并将引用指向它。

用new String(String original) 给字符串引用赋值时,先会检查字符串池中有没有值与original相同的字符串,如果没有,先在字符串池中创建字符串对象,有则不创建。然后再在内存堆中生成值与之相同的字符串对象,并指向它。
总之,都在堆中生成对象,都返回堆中字符串对象的地址。而字符串池中则会先有值相同的字符串对象,在堆中生成的对象都是它的副本。

两个字面量字符串相加,得到字符串池中的对象引用。而带有一个字符串引用的相加就会得到堆中的对象的引用。
"Hel" + "lo"; 得到的引用指向字符串池对象。
String  lo = "lo"; "Hel" + lo; 得到的引用指向堆中的对象。

StringBuffer类:
为了解决String对象是常量的问题。String对象生成之后,它的值不能再改变,也就是不能往里添加内容。而StringBuffer类则 可以用append方法往里增加内容。因此它多作为输入输出缓冲。
StringBuffer非常像String,使用append方法,参数可以是整型,浮点型,布尔型,字符数组等,但是都将转化为字符串形式添加到尾部。

包装类(Wrapper Class):
针对于原生数据类型的包装。目的将原生数据变成对象。所有的包装类(8个)都位于java.lang包下。实现原生类型和包装类型的相互转换。

数组:
int[] a = new int[4];
在Java里,数组是一个对象,这是和C语言很大的区别。
数组里length属性是一个final变量,一旦生成数组对象就无法再去改变。
数组的equal方法没有重写,因此两个数组的长度和值都一样,他们的equal之后的返回值也是false。
Object[] objs = new Object[3];
这句代码只生成三个Object的引用,而没有生成Object对象,每个数组元素存放的是Object的引用。还需将它每个引用实例化一个对象。
原创粉丝点击