java String 字符串
String类在java.lang包下,所以使用的时候不需要导包
*String类代表字符串,java程序中的所有字符串都是此类的实例,*也就是说,java程序中所有的双引号字符串,都是String类的对象。
String对象的创建
一:
String str= new String(“java”);
二:
String str = new String(new char[] {‘1’,‘2’});
三:
String str = “java”;
String 对象在哪个内存区创建对象?
1在常量池中:
像这样使用常量对对象进行赋值的会在常量区创建String对象(上面创建String对象的第三种方法)
如果对对象进行重新赋值会重新创建一个String对象 之前的对象会在方法结束后被销毁。
(字符串常量池从jdk7以后就从方法区挪到了堆内存中)
String str = "a";
str = "b"; //这里是重新创建了String对象的
如果是这样创建String对象的,相同内容的String对象在内存中只会存在一个。
String str = "java";
String str2 = "java";
System.out.println(str == str2);//输出为true(==号比较的是内存地址)
2在堆内存中:
使用new关键字创建的String对象会在堆中创建实例对象(上面创建String对象的一和二)
这个就和普通的创建对象一样
String str = new String("java");
String str2 = new String("java");
System.out.println(str==str2); //false
char[] ch = new char[] {'1','2'};
String str3 = new String(ch);
String str4 = new String(ch);
System.out.println(str3==str4);//false
字符串的对比:
== 号作比较
基本数据类型:比较的是具体的值;
引用数据类型:比较的是地址的值;
String str1="java";
String ste2 = "java";
System.out.println(str1==str2);//fales (在常量池中创建对象 资源是共享的只创建了一个)
/*----------------------*/
char[] ch = new char[] {'1','2'}
String s1 = new String(ch);
String s2 = new String(ch);
System.out.println(s1 == s2);//false (普通的对象比较 虽然内容相同,但是是创建了不同的对象)
/*----------------------*/
char[] ch = new char[] {'1','2'}
String s1 = new String(ch);
String s2 = new String("12");
System.out.println(s1 == s2);//false (一个在常量池中一个在堆内存中比较自然不同)
/*----------------------*/
String str1 = "abc";
String str2 = "ab";
String str3 = str2+"c";
String str4 = "a" + "b" + "c";
System.out.println(str1 == str3);//false (当字符串之间使用+号拼接的时
候,系统会在底层使用StringBuilder对象调用append方法完成拼接,拼接完成后再调用toString方法转化为String类型)
System.out.println(str1 == str4);//true (java存在常量优化机制,在编译时会将 "a"+"b"+"c"拼接为"abc")
内容比较:
equals(),(严格区分大小写) equalslgnoreCase() (不区分大小写)
public boolean equals(Object anObject) 是用来比较字符串内容的String对象的一个方法。
String str1 = "abc";
String str2 = "ab";
String str3 = str2+"c";
System.out.println(str1.equals(str3)); //true
/*-----------------------------*/
String str1="java";
String ste2 = "java";
System.out.println(str1.equals(str2)); //true
/*-----------------------------*/
char[] ch = new char[] {'1','2'}
String s1 = new String(ch);
String s2 = new String(ch);
System.out.println(s1.equals(s2)); //true
获取长度
length属性针对数组;
length()方法针对字符串;
size()针对泛型集合
String中的方法:
根据下标获得字符串里面的单个字符:
char ch = str.charAt(int index);
将当前字符串拆分为数组并返回:
char[] arr = str.toCharArray();(默认重写了toString())
字符串截取:
String newStr = str.subString(startIndex,endIndex) [startIndex,endIndex) 左闭右开
String newStr = str.subString(index) [index,str.length()) 获取当前索引到最后的字符串。
字符串替换:
String string = str.replace(oldString,newString); 将字符串中的oldString替换成newString 返回该段被替换过的字符串。
字符串分割:
String[] split = str.split(regex); 根据regex分割str字符串并将分割后的数据通过数组的形式返回。