String类
1.String类又称作不可变字符序列。【核心数组为char value[],用final修饰,不可改变。
2.String位于java.lang包中,Java程序默认导入java.lang包下的所有类。
3.Java字符串就是Unicode字符序列,例如字符串“Java”就是4个Unicode字符’J'、’a'、·v'、’a’组成的。
4.Java没有内置的字符串类型,而是在标准Java类库中提供了一个预定义的类String,每个用双引号括起来的字符串都是String类的一个实例。
5.Java允许使用符号“+”把两个字符串连接起来。
package stringlx;
public class TextString {
public static void main(String[]args){
String str="abc";
String str2 = new String("def");
String str3="abc"+"defgh";
String str4 = "19" +37; //不是加法,是字符串连接符。
System.out.println(str4);
}
}
得到 1937
n-符号"+"把两个字符串按给定的顺序连接在一起,并且是完全按照给定的形式。
n-当"+"运算符两侧的操作数中只要有一个是字符串(String)类型,系统会自动将另一个操作数转
换为字符串然后再进行连接。
null表示对象为空,不存在。" "存在字符串对象,只是内容为空字符序列
可变与不可变字符的使用陷阱
public class Test {
public static void main(String[] args){/**使用String进行字符串拼接*/
String str8="";
//本质上使用StringBuilder拼接,但每次循环都会生成一个StringBuilder对象
long num1=Runtime.getRuntime().freeMemory();//获取系统剩余内存空间
long time1=System.currentTimeMillis();//获取系统的当前时间
for (int i=0;i<5000;i++){
str8=str8+i;//相当于产生了10000个对象
}
long num2=Runtime.getRuntime().freeMemory();
long time2=System.currentTimeMillis();
System.out.println("String占用内存:" +(num1-num2));
System.out.println("String占用时间:" +(time2-time1));
/**使用StringBuilder进行字符串拼接*/
StringBuilder sb1=new StringBuilder("");
long num3=Runtime.getRuntime().freeMemory();
long time3=System.currentTimeMillis();
for (int i=0;i<5000;i++){
sb1.append(i);
}
long num4=Runtime.getRuntime().freeMemory();
long time4=System.currentTimeMillis();
System.out.println("StringBuilder占用内存:" +(num3-num4));
System.out.println("StringBuilder占用时间:" +(time4-time3));
}
}
常量池·
一般我们字符串比较的时候,通常情况只比较他们的值是否相等,所以通常比较字符串是使用equals,而使用双等于号比较是比较不同变量的对象是否相同。对象相同,定义的字符串都会放在常量池地址是相同的
string类常用方法
String类对象代表不可变的Unicode字符序列,因此我们可以将String对象称为“不可变对象”。“不可变对象”指的是对象内部的成员变量的值无法再改变。
在遇到字符串常量之间的拼接时,编译器会做出优化,即在编译期间就会完成字符串的拼接,因此,在使用==进行String对象之间的比较时,我们要特别注意
StringBuffer与StringBuilder
StringBuilder和StringBuffer称之为“可变字符序列”。StringBuffer和StringBuilder非常类似,均代表可变的字符序列。这两个类都是抽象类AbstractStringBuilder的子类,方法几乎一模一样。
区别:
StringBufferJDK1.0版本提供的类,线程安全,做线程同步检查,效率较低。
StringBuilder JDK1.5版本提供的类,线程不安全,不做线程同步检查,因此效率较高。建议采用该类。
·常用方法列表:
1.重载的public StringBuilder append(..)方法
可以为该StringBuilder对象添加字符序列,仍然返回自身对象。
2.方法 public StringBuilder delete(int start,int end)可以删除从start开始到end-1为止的一段字符序列,仍然返回自身对象。
3.方法 public StringBuilder deleteCharAt(int index)移除此序列指定位置上的char,仍然返回自身对象。
4.重载的public StringBuilder insert(..)方法
可以为该StringBuilder对象在指定位置插入字符序列,仍然返回自身对象。
5.方法 public StringBuilder reverse()
用于将字符序列逆序,仍然返回自身对象。
6.方法public String toString()返回此序列中数据的字符串表示形式。
7.和String类含义类似的方法:
public int indexOf(String str)
public int indexOf(String str,int fromIndex) public String substring(int start)
public String substring(int start,int end)
public int length()
char charAt(int index)
append
StringBuffer的append函数,链接字符串时,效率要远远高于"+",特别是在使用循环时。一旦循环次数高起来,使用“+”,会导致系统崩溃,主要原因在于,工程建立后,大量用户调用该函数,同时进行多次该循环,耗费大量内存导致系统崩溃,而append在使用时不会创建内存,非常实用而且效率高
利用reverse实现倒序
delete,insert,setCharAt的使用
得到:我zyx高v爱uts你rqponmlkjihgfedcba
Date
计算机世界,我们把1970年1月1日00:00:00定位基准时间,每个量度单位是毫秒。
我们用long类型的变量表示,如果想获得现在时刻的时刻数值可以使用:Long now=system curentTime Millis();
这个“时刻数值”是所有时间类的核心值,年月日都是根据这个“数值”计算出来的。
·DateFormat
DateFormat类的作用把时间对象转化成指定格式的字符串。反之,把指定格式的字符串转化成时间对象。DateFormat是一个抽象类,一般使用它的的子类SimpleDateFormat类来实现。
DateFormat与SimpleDateFormat的使用
代码中格式化字符的具体含义
Calendar
Calendar类是一个抽象类,为我们提供关于日期计算的相关功。
GregorianCalendar是Canada的一个具体子类,提供了世界上大多数国家,地区使用的标准日历系统
菜鸟雷区
注意月份的表示,一月是0,二月是1,以此类推,12月是11。因为大多数人习惯于使用单词而不是使用数字来表示月份,这样程序也许更易读,父类Calendar使用常量来表示月份:JANUARY、FEBRUARY等等。
获得日期方法
Calendar与date互化
public static void main(String[] args) {
Date date = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
}
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR,2021);
calendar.set(Calendar.MONTH,11);
calendar.set(Calendar.DAY_OF_MONTH,6);
calendar.add(Calendar.DAY_OF_MONTH,2);
Date time = calendar.getTime();
}
List
java.util.List接口继承了java.util.Collection接口,因此List接口的实现类都实现了Collection接口的方法,这样List接口的实现类的对象都可以调用来自于Collection接口的方法。
List接口的常用实现类
1,ArrayList
2.LinkedList
3.CopyOnWriteArrayList 并发
List集合的特点
1.List集合是有序的,即数据存取的顺序一致,元素可以重复
2.List集合中的元素有对应顺序的索引。
常用方法
1. 基于索引添加元素
- add(int index, E element); 往集合中指定的索引添加元素
- addAll(int index, Collection<? extends E> c);往集合中指定索引添加指定的集合
public void testListAddA11(){
List<string> cities=new ArrayList>();
cities.add(0,"北京");
cities.add(1,"上海");
cities.add(2,"广州");
cities.add(3,"深圳");
system.out.print1n(”往集合中指定的索引添加元素 集合的元素内容是"+cities);
List<String> othercities=new ArrayList<>();
othercities.add("重庆");
othyrcities.add("成都");
othercities.add("武汉");
othercities.add("杭州");
//在深圳的后面加其他的城市
int index=cities.size();
cities.addA11(index, othercities);
System.out.print1n("往集合中指定索引 添加指定的集合集合的元素内容是"+cities);
}