java基础知识整理——字符串、集合、多线程(四)

本文详细介绍了Java中的字符串、集合和多线程基础。字符串部分讲解了常量池、不可变性以及StringBuilder和StringBuffer的使用。集合部分提及了自定义类在Set中的使用需求。多线程部分涉及Thread类、Runnable接口,以及线程同步和通信的方法。
摘要由CSDN通过智能技术生成

java基础知识整理字符串、集合、多线程(四)

1.字符串

Java中的字符串只能位于内存中的两个区域:常量池和Java堆。常量池维护了一个StringTable,它是一个hashtable,以字符串hashcode作为键,字符串引用作为值;Java堆中存储的就是普通的字符串对象。

1.字符串的定义形式:

1. String s = "kkk"; //把“kkk”放到常量池中,并在栈中生成一个引用s。
2. String s = new String();  //其中s的值为""
3. String s1 = new String("kkk"); //在堆中生成一个“kkk”字符串对象,并在栈中返回一个s1引用。
创建流程:
先去常量池看有没有"kkk"存在,如果有,就直接使用"kkk"创建对象。
如果不存在,则先在常量池中创建字符串"kkk",然后再使用"kkk"创建对象,并赋值给字符串引用s1。

2.字符串的不可变性

String s2 = "ddd"; //在常量池中生成字符串"ddd",引用指向s2
s2 = "hello" + s2; //在常量池中重新生成字符串"helloddd",引用指向s2;
对String类型进行+操作,会使得原来的"ddd",没有引用指向它,如果进行太多次+操作的话,会导致频繁地创建新的内容,导致效率下降。

故频繁进行叠加、删减操作等,建议使用StringBuilder。

例外:StringBuffer和StringBuilder二者基本相似,StringBuffer是线程安全的,StringBuilder则没有,所以性能略高,执行速度快于StringBuffer。

2.集合

关于集合的内容只讲一点点。

1.自定义的类用Set的话,要重写hashCode和equals方法,才能让内容相同的类不能添加入Set集合中。

public int hashCode(){
   
	//自动生成即可
}
@Override
public boolean equals(Object obj){
   
//1.判断是否是同个对象
//2.向下转型后,判断内容是否相等。
	if(this == obj)
		return true;
	if(obj.getClass() == Cat.class){
   
		Cat cat = (Cat)obj;
		return cat.getName().equals(name)&&(cat.getMonth()==mon
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值