包装类WrapperType.java
针对八种基本数据类型相应的引用类型
boolean-Boolean
char-Character-Object
继承Object
byte-Byte-Number-Object
int-Integer
float-Float
short-Short
long-Long
继承Number继承Object
//手动装箱
int n1 = 100;
Integer integer = new Integer(n1);
Integer integer1 = Integer.valueOf(n1);
//手动拆箱
int i = integer.intValue();
//After jdk5 use 自动装箱
int n2 = 200;
Integer integer2 = n2;//Integer.valueOf
int n3 = integer2;//Integer.valueOf
三元运算符是一个整体
Integer
new出来的是两个对象,两个对象一定不相等。
自动装箱用Integer.valueOf()数据范围在-128~127。装箱后如果在范围中证明是一个对象,因此他们相等。
valueOf底层是从数组中找的,而正常new对象取得是不同的对象。
只要有基本数据类型,判断的就是值是否相等。
如果是new,底层采用的并不是valueOf(),不需要数据在从范围中。
String
String继承Object类
实现三个接口
1.Serialable
String类实现这个接口,说明String可以串行化(可以在网络中传输)
2.Comparable
说明String对象可以相互比较
3.CharSequence(字符序列)
主要是前两个接口比较重要
底层采用Unioncode编码,一个字符占两个字节
String是final类,即不能被其他类所继承
String本质还是一个char数组,有属性private final char value[];用于存放字符串内容
注意:value是一个final类型,不可修改(不是字符,而是value的地址)。
比如value指向过一个数据"tom"它就不可以再指向另一个对象,但是对象中的字符是可以继续更改的。
当我们把final去掉,就可以更改,但是不可以去掉
String对象的两种创建方式
1.直接赋值
String s = "daniel";
先在方法区中的常量池中创建,然后创建出一个地址,在栈中的主方法中指向常量池中的地址
2.调用构造器
String s = new String("daniel");
先在堆里面开辟一个空间,value,然后在方法区里面找,找不到就创建,找到了堆直接指向常量池,创建之后在main方法中指向堆中地址,再指向常量池中创建的。
String中的equals被重写过,比较的是value数组,如果有一个不同,就不等。
public class String01 {
public static void main(String[] args) {
String a = "dal";
String b = "dal";
System.out.println(a.equals(b));
//第二次创建b时直接指向a创建的对象,因此对比数组时相等
System.out.println(a==b);
//都是从栈指向常量池中的同一个地址
}
==比较的是地址,equals比较的是指向的value数组
其中第一个直接赋值,第二个new对象的情况下,第二个在堆中开辟value,找到后堆中地址指向常量池。因此两个地址不同。即不是同一个对象。
intern,当调用intern方法,会返回常量池中的地址
如果在栈中有一个引用变量s1(对象)被创建,它首先指向常量池中先创建的字符串,这里是第一个对象,但是String是final类,不可改变其地址和内容,一旦想要改变其内容,需要在常量池中搜索是否包含该字符串,符合的化直接指向,不符合的话重新在常量池创建,指向后即创建了一个新的对象。
string常用方法
equals 判断数组中是否相同
equalsIgnorcase忽略大小写
lenth判断长度
indexOf获取字符字符串中第一次出现的位置,从0开始找不到-1,可以是字符或者字符串
lastIndexOf选取最后一个出现的字符,从·0开始,找不到-1
substring截取制定范围的字串,两个数字是范围
toUpperCase转换成大写
toLowCase转换成小写
concat拼接
replace替换,可以写两个内容在方法括号里,可以把前面的内容替换成后面的内容
split 在字符串中以split后的字符为标准,将字符串分割
StringBuffer
不用每次增删改查都更换地址,效率较高,因为有char[] value。而不是final类
capasity容量
构造器:
String和StringBuffer相互转化
方法:
增:append(追加)
删:delete
改:replace