String类
声明及赋值方式
String str=new String("111");
String s="111"
区别
第一种是以引用的方式,在堆中存放数据,栈中存放地址;第二种在赋值时会在常量池中先查找是否有该字符串,如果没有则开辟新空间,并将地址存入栈,如果有则直接将地址存入栈
-
String 类代表字符串。
-
String 类不是基本数据类型,它是一个类。默认值是null。
-
String 字符串是常量,字符串的值在创建之后不能更改。
给字符串重新赋值时,不会在堆中修改,而是重新开辟一块空间并修改栈中的地址
int i=10; String str=new String("david"); str="tom";
-
String 类是最终类,不能被继承。
-
String类的内存模型
String类常用方法
-
charAt() 截取一个字符
-
length() 字符串的长度
-
getBytes() 将字符串变成一个byte数组
-
equals() 和 equalsIgnoreCase() 比较两个字符串是否相等,前者区分大小写,后者不区分
equals()比较的是堆中的数据,==比较的是栈中-
startsWith() 和 endsWith() 判断字符串是不是以特定的字符开头或结束
-
concat() 连接两个字符串
-
substring() 截取字符串【包前不包后】
-
indexOf() 和lastIndexOf() 前者是查找字符或字符串第一次出现的地方,后者是查找字符或字符串最后一次出现的地方
-
compareTo() 和compareToIgnoreCase() 按字典顺序比较两个字符串的大小,前者区分大小写,后者不区分
-
replace() 替换
-
split() 按指定字符切割
-
-
StringBuffer和StringBuilder( 不开辟新空间 )
- 场景:因为String是常量,每次修改其值都需要重新在堆内存中开辟新空间。这样再频繁对变量进行赋值操作时就会导致内存浪费。所以再需要频繁对变量值进行修改的时候,可以使用StringBuffer和StringBuilder
- 方法:
- append() 在原字符串后拼接字符
- insert() 在原字符串前拼接自发
- toString() 转化成字符串
- reverse() 反转字符
- 区别:
- StringBuffer线程安全
- StringBuilder非线程安全
-
Date类
- Date类在java.util.Date中。是进行日期操作的类。Date类API
Date now = new Date();//获得当前时间 Date now = new Date(long millisec)//参数是从1970年1月1日起的毫秒数
- 使用SimpleDateFormat类对日期类型进行格式化,形成字符串。
public static void main(String[] args) { Date now = new Date(); // 创建一个Date对象,获取当前时间 // 指定格式化格式 SimpleDateFormat f = new SimpleDateFormat("今天是 " + "yyyy年MM月dd日HH点mm分ss秒"); System.out.println(f.format(now)); // 将当前时间袼式化为指定的格式 } }