包装类和基本数据的转换
JDK5之前用的是手动拆装箱的,JDK5之后用的是自动拆装箱
实际上内在原理是完全一样的,都是装箱用 valueOf()方法,拆箱用intValue()方法
自动装箱与拆箱
装箱
int a=100;
Integer integer2=a;(底层用的仍然是Integer.valueOf(a))
拆箱
Integer integer2=new integer()
Int a=integer2;(底层用的仍然是intValue(Integer2))
三元运算符是一个整体
Object a=true?new Integer(1):new Double(2.0)
system.out.println(a)
这个程序输出的是 1.0,为什么?因为这个三元运算符是一个整体,后面的Double提升了他的精度
后面的if else 因为不是一个整体所以精度并没有提升
包装类和string类型相互转换
包装类型-->string类型
Integer i=100;
- 方法一:使用字符串拼接的特性,将别的类型转换为字符串
string s=i+"";
- 方法二:使用对象的tostring方法
string s=i.tostring();
- 方法三:使用包装类的valueOf方法
string s=string.valueOf(i)
string类型-->包装类型
string s="123456"
- 方法一:使用parseInt先转换为整数型然后利用自动装箱
Integer i=Integer.parseInt(s)
- 方法二:直接使用构造器
Integer i= new Integer(s)
常用方法:
Integer面试题 P463-P464
- i==j 等等是看他是不是一个东西,i和j是两个new出来的东西,所以不相等
- 当使用自动装箱时,底层用的是valueOf() valueOf在-127~128的范围内是不new的 缓存
- 主要是阅读valueOf的源码
- 只要有基本数据类型,那就是判断值是否相等
String类
- string对象用于保存字符串,也就是一串字符序列
- 保存的是字符串常量,也就是必须用双引号括起来
- 字符串使用Unicode编码,一个字符占用两个字节
- String有很多构造器,构造器的重载new string() newstring(char[ ] a)等
- String实现了两个类Serializable【可以串行化,在网络上传输】 和comparable【string对象可以比较大小】
- string 是 final类,不可以被继承
- 存放内容的是一个char数组
- value是final类型,不可以被修改(值可以改,但是地址不可以改)
创建string对象的两种方法
- 直接赋值 string s="asd";
先看看常量池有没有asd,如果没有直接创建,如果有,就直接指向(地址变成相同)
- 使用构造器 string s=new string("asd");
指向的是堆里面的value,然后value指向常量池里的值
- 常量相加,看的是池,变量相加,看的是堆
string对象的特性
??
string的常用方法
stringbuffer类
- stringbuffer类的value就不是在常量池了,而是在堆里,string是value指向常量池,更新就直接换新的地址
- stringbuffer更新不是变地址,而是直接变内容
- stringbuffer是一个容器
stringbuffer的大小
- 你初始构建的srtingbuffer大小是16
- 如果你指定了一个长度100,那么大小就是100+16
- 如果你给他一个字符串,那么长度就是字符串长度加上16
stringbuffer和string的互相转换
string-->stringbuffer类型
string s="asd"
- 方法一:使用构造器
StringBuffer StringBuffer1 = new StringBuffer(s);
- 方法二:使用append方法进行字符串拼接
StringBuffer StringBuffer1 = new StringBuffer();
StringBuffer1=StringBuffer1.append(s)
- 方法三:使用包装类的valueOf方法
string s=string.valueOf(i)
stringbuffer-->string类型
StringBuffer StringBuffer = new StringBuffer("asd");
- 方法一:使用对象的tostring
string s=StringBuffer.tostring()
- 方法二:构造器直接
string s=new string(StringBuffer)