在Java中基本数据类型不具有对象特征的
没有属性和方法,没法对象化交互
包装类的产生就是为了解决基本类型这样的问题
通过包装类可以让基本类型拥有属性和方法,可以对象化交互
注意一下打钩的两个字不一样
所有的包装类都是final继承的
所有的数值型都是继承Number类的
bool和char不是数字所以继承了Object
装箱:基本数据类型 → 包装类
拆箱:包装类 → 基本类型的值
装箱:1自动装箱
2手动装箱
拆箱:
1 自动拆箱
2.手动拆箱
基本类型和字符串转换
字符串转换基本类型
1 包装类的parse方法
2 valueOf方法 基本数据类型和包装类之间的装箱操作
包装类和基本数据类型之间存在自动拆箱操作
先将字符串转换为包装类,再自动拆箱完成转换
基本数据类型的初始值
默认初始值:
如果是包装类,则是null
1.new了两次,指向不同给的空间所以不一样
2.自动的拆箱
3.编译器实际上执行了
Java提供了类似于常量素组的缓存区,对象池如果传进来参数-128<参数<127就是直接拿来
最后一个,不在-128<参数<127所以不在这个范围内 ,必须new一个
除了Float和Double都是常量池概念
字符串:
String
创建String对象三种方式
String s1 = "jhkj";
String s2 = new String(); 创建了空的字符串对象
String s3 = new String("jhkj");
String str1 = "jhkj";
String str2 = "jhkj";
String str3 = new String("jhkj");
System.out.println("str1和str2的内容相同"+(str1.equals(str2)));
System.out.println("str1和str3的内容相同"+(str1.equals(str3)));
System.out.println("str1和str2的地址相同"+(str1==str2));
System.out.println("str1和str3的地址相同"+(str1==str3));
我们内存里有栈,常量池 和堆
String str1 = "jhkj";
在栈中生成str1引用 常量池生成"jhkj"
str1指向"jhkj"
String str2 = "jhkj";
栈生成str2引用 常量池已经有"jhkj"不会生成
直接把str2指向"jhkj"
String str3 = new String("jhkj");
在栈生成str3引用,堆创建new String("jhkj");
栈指向堆
如果String str4 = new String("jhkj");
在栈生成str4引用,堆创建新的new String("jhkj");
栈指向堆
String对象的不可变性:String对象一但创建则不能修改,是不可变的
所谓的修改其实是创建了新的对象所指向的内存空间不变
String s1 = "jh";
s1 = s1 + "kj";
我们用s1 + "kj"
实际上是常量池生成了新的字符串 "jhkj",在执行赋值 s1指向"jhkj"
"jh"没有指向他就被废弃掉了
StringBuilder
String和StringBuilder区别
String具有不可变现而StringBuilder不具备
当频繁操作字符串使用StringBuilder
当用String频繁操作会产生很多中间变量,也会产生很多在常量池中废弃的数据
StringBuilder可以避免这种情况发生
另外有个StringBuffer
StringBuilder和StringBuffer二者基本相似
StringBuffer是线程安全的,StringBuilder则没有,所以StringBuilder性能更高
大部分我们处理字符串都是单线程,线程安全主要是多线程情况下StringBuilder更好
四个构造方法
StringBuilder()创建了能容纳16个字符的空间 的空字符串
第二个:等同与String类
第三个:容量
第四个:用的最多,穿字符
还有很多方法 官网查