java常用类型:
Ineteger等包装类
String类,StringBuffer类和StringBuilder类
Math类及常用方法
System类及常用方法
Arrays类及常用方法
BigInteger类和BigDecimal类及常用方法
日期类Date类,Calender类和LocalDateTime类
文章目录
- String
- 介绍
- String创建细节
- String s ="hsp" 和 Stirng s1 = new Stirng("hsp")的区别
- String底层存储小结
- 经典题目
- 字符串的特性
- String重新赋值时底层处理
- String两个常量相加创建时
- String 两个对象相加
- 题目
- String总结
- String常用方法和案例
- String格式符
- StringBuffer
- stringBuffer介绍
- String Vs StringBuffer
- StringBuffer的构造器
- StringBuffer 与 String转换
- StringBuffer常用方法
- StringBuilder
- 基本介绍
- String, StringBuffer 和StringBuilder 对比
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
布尔型:%bString.toUpCase().charAt(0)
下方表示用对应的数据代替对应的位置打印
StringBuffer
stringBuffer介绍
存储特性
char [] 不是final 可以修改字符串的值
存放在堆中 可以修改
String Vs StringBuffer
StringBuffer的构造器
StringBuffer 与 String转换
随便记一两个就行
StringBuffer常用方法
delete 不会删除下标为end的 元素 , 即左闭右开,删到end前一个
其他同理
StringBuilder
基本介绍
不是线程安全的 不是同步的 用在单线程(即只有一个线程来操作它)
StringBuilder 单线程 StringBuffer 用在多线程
因为底层实现没有关键词 synchronized 锁多线程会有风险