包装类

104 阅读3分钟

包装类和基本数据的转换

JDK5之前用的是手动拆装箱的,JDK5之后用的是自动拆装箱
实际上内在原理是完全一样的,都是装箱用 valueOf()方法,拆箱用intValue()方法

自动装箱与拆箱

装箱

int a=100;
Integer integer2=a;(底层用的仍然是Integer.valueOf(a))

拆箱

Integer integer2=new integer()
Int a=integer2;(底层用的仍然是intValue(Integer2))

三元运算符是一个整体

Object a=truenew 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)

常用方法:

微信截图_20230807151921.png

Integer面试题 P463-P464

  • i==j 等等是看他是不是一个东西,i和j是两个new出来的东西,所以不相等
  • 当使用自动装箱时,底层用的是valueOf() valueOf在-127~128的范围内是不new的 缓存
  • 主要是阅读valueOf的源码
  • 只要有基本数据类型,那就是判断值是否相等

String类

  1. string对象用于保存字符串,也就是一串字符序列
  2. 保存的是字符串常量,也就是必须用双引号括起来
  3. 字符串使用Unicode编码,一个字符占用两个字节
  4. String有很多构造器,构造器的重载new string() newstring(char[ ] a)等
  5. String实现了两个类Serializable【可以串行化,在网络上传输】 和comparable【string对象可以比较大小】
  6. string 是 final类,不可以被继承
  7. 存放内容的是一个char数组
  8. value是final类型,不可以被修改(值可以改,但是地址不可以改)

创建string对象的两种方法

  • 直接赋值 string s="asd";

先看看常量池有没有asd,如果没有直接创建,如果有,就直接指向(地址变成相同)

  • 使用构造器 string s=new string("asd");

指向的是堆里面的value,然后value指向常量池里的值

  • 常量相加,看的是池,变量相加,看的是堆

string对象的特性

??

string的常用方法

微信截图_20230807161744.png

微信截图_20230807162210.png

stringbuffer类

  • stringbuffer类的value就不是在常量池了,而是在堆里,string是value指向常量池,更新就直接换新的地址
  • stringbuffer更新不是变地址,而是直接变内容
  • stringbuffer是一个容器 image.png

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)