一 整数缓冲区
-
堆内有整数缓冲区内,其内保存了从-128到127的Integer类型,所以当对-128到127的值进行包装时,会直接引用这些包装好的值.
-
在实际应用中,对已创建的对象进行复用,节省内存空间
package oop;
public class Main {
public static void main(String[] args) {
int n1 = 10;
int n2 = 20;
Integer integer = new Integer(n1);//普通装箱
Integer integer1 = new Integer(n1);
System.out.println(integer==integer1);//false
Integer I1=Integer.valueOf(100);//自动装箱 Integer.valueOf()
Integer I2=Integer.valueOf(100);
System.out.println(I1==I2);//true
Integer T1=Integer.valueOf(200);//自动装箱
Integer T2=Integer.valueOf(200);//不在缓冲区的范围,所以需要在堆内开辟新的空间
System.out.println(T1==T2);//false
}
}
二 String类
2.1普通String类
- 字符串是常量,创建之后不可改变(不可变性)
- 字符串字面值存储在字符池 (方法区) 中,可以共享
- String s = “小帅”;产生一个对象,字符池池中存储
- String s=new String(“小帅”);产生两个对象,堆 池各存储一个,其中栈中变量指向堆中的对象[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lwPLVTAQ-1626610761552)(C:\Users\77647\AppData\Roaming\Typora\typora-user-images\image-20210718082410840.png)]
package oop;
public class Main {
public static void main(String[] args) {
String s1 = new String("java");
String s2 = new String("java");
System.out.println(s1==s2);//false
System.out.println(s1.equals(s2));//true
}
}
buffer : n. 起缓冲作用的人(或物)
[发现了一个很不错的笔记](JAVA集合类简要笔记 - 内部类 包装类 Object类 String类 BigDecimal类 system类 - CoderZjz - 博客园 (cnblogs.com))
2.2 可变字符串
- StringBuffer : 可变长字符串,运行效率慢、线程安全
- StringBuilder : 可边长字符串、运行快、线程不安全
效率都比String高且节省内存
psvm(String[] args){
// StringBuffer 和 StringBuilder 用法一致
StringBuffer sb = new StringBuffer();
// 1. append(); 追加
sb.append("java no1");
System.out.println(sb.toString());
// 2. insert(); 添加、插入
sb.insert(0, "在第一个位置插入");
// 3.replace(); 替换
sb.replace(0, 9, str); // 左闭右开
// 4. delete(); 删除
sb.delete(0, 5); // 左闭右开
// 5. 清空
sb.delete(0, sb.length());
}