java常用类: String,StringBuffer和StringBuilder的底层区别

java常用类型:
Ineteger等包装类
String类,StringBuffer类和StringBuilder类
Math类及常用方法
System类及常用方法
Arrays类及常用方法
BigInteger类和BigDecimal类及常用方法
日期类Date类,Calender类和LocalDateTime类

String

介绍

在这里插入图片描述

String创建细节

对String直接赋值(如下) ,String的值直接放在常量池(常量池的详细内容需要学习jvm,但这里只需看下面的结构图就可以)
在这里插入图片描述

string的本质是value[] ——>地址

不可修改指 value的地址不能修改 但是value装的值可以修改

String s =“hsp” 和 Stirng s1 = new Stirng(“hsp”)的区别

在这里插入图片描述

两种方式的区别 结构
在这里插入图片描述

String底层存储小结

== 比较值 : 就是只能比较( 数字) 和 (地址串 ) 不能比较 (字符串的值)
equals() 比较对象值 : 直接比较字符串的值,是底层重写的方法
intern()返回常量池的地址 没有就造常量池地址,再返回
new 对象的引用 : 指向 堆中value的地址 不指向 方法区的常量池 地址


案例
因为a和b的值一样 所以a.equals(b)是T
因为a和b的地址也是一样,在常量池就是同一个东西,所以==也是 T
在这里插入图片描述

经典题目

在这里插入图片描述

b.intern() 返回常量池的引用,如果常量池没有就从堆中存到常量池再返回地址

在这里插入图片描述


字符串的特性

String重新赋值时底层处理

只要常量池没有就创建字符串

在这里插入图片描述

String两个常量相加创建时

在这里插入图片描述

String 两个对象相加

就会在常量池存三个字符串值
在这里插入图片描述

c指向堆,在堆中创建value ,再在常量池创建常量

a , b指向常量池

在这里插入图片描述

题目

在这里插入图片描述

难题

1.函数中 的 str = "java"新生成常量池 但是函数结束 str被销毁 最后还是输出 主函数对象的str;

2.函数中 的 ch[0] 成功修改了 堆中的值 主函数的值也修改了

3.就是说 常量池的值 只能添加 不能修改和删除

在这里插入图片描述

String总结

在这里插入图片描述

String常用方法和案例

在这里插入图片描述

案例
在这里插入图片描述

str.equals(str) //值的对比 内容是否相等

str.equalsIgnoreCase(str) //忽略大小写
 
str.length() //不包括'\0'
   
str.IndexOf("as")
str.IndexOf('a')  //最前面那个
    
str.substring(0,5) //下标0到 5-1  最后一个不取 
                   //5超出范围则 取完剩下的就行
    
str.substring(5)  //下标5开始 取完剩下的
    
str.trim()   //去除前后空格
    
str.charAt(1)  //返回下标的字符

在这里插入图片描述

例子 此类方法都不会 改变原常量 而是新增

concat和replace 拼接字符

在这里插入图片描述

split()分割 转义
split()和replace()还可以和正则表达式配合使用,更强大:java正则化表达式
在这里插入图片描述

String格式符

格式符: %s, %c, String.format()
字符串:%s
整型: %d
字符型:%c
浮点型:%f
布尔型:%b

String.toUpCase().charAt(0)

下方表示用对应的数据代替对应的位置打印
在这里插入图片描述


StringBuffer

stringBuffer介绍

在这里插入图片描述

存储特性

在这里插入图片描述

char [] 不是final 可以修改字符串的值

存放在堆中 可以修改


String Vs StringBuffer

在这里插入图片描述

在这里插入图片描述

StringBuffer的构造器

在这里插入图片描述

StringBuffer 与 String转换

随便记一两个就行
在这里插入图片描述

StringBuffer常用方法

在这里插入图片描述

delete 不会删除下标为end的 元素 , 即左闭右开,删到end前一个

其他同理

StringBuilder

基本介绍

在这里插入图片描述

不是线程安全的 不是同步的 用在单线程(即只有一个线程来操作它)

StringBuilder 单线程 StringBuffer 用在多线程

因为底层实现没有关键词 synchronized 锁多线程会有风险

在这里插入图片描述

String, StringBuffer 和StringBuilder 对比

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值