String类
- String类基础
package com.day0209_1;
import org.junit.Test;
/**
*String的使用
*/
public class StringTest {
/*
String的实例化方式
方式一:通过字面量定义的方式
方式二:通过new+构造器的方式
面试题:String s =new String("abc");方式创建对象,在内存中创建了几个对象?
两个:一个是堆空间中new结构,另一个是char[]对应的常量池中的数据:"abc"
*/
@Test
public void test2(){
//通过字面量定义的方式:此时的s1和s2的数据JavaEE声明在方法区中的字符串常量池中。
String s1="javaEE";
String s2="javaEE";
//通过new+构造器的方式:此时的s3和s4保存的地址值,是数据在堆空间中开辟空间以后对应的地址值。
String s3=new String("javaEE");
String s4=new String("javaEE");
System.out.println(s1==s2);//true
System.out.println(s1==s3);//false
System.out.println(s1==s4);//false
System.out.println(s3==s4);//false
System.out.println("**********");
Person p1=new Person("Tom",12);
Person p2=new Person("Tom",12);
System.out.println(p1.name.equals(p2.name));//true
System.out.println(p1.name==p2.name);//true
p1.name="Jerry";
System.out.println(p2.name);//Tom
}
/*
String:字符串,使用一对“”引起来表示
1.String声明为final的,不可被继承
2.String实现了Serializable接口:表示字符串是支持序列化的。
实现了Comparable接口:表示String可以比较大小
3.String内部定义了final char[] value用于符串数据
4.String:代表不可变的字符序列。简称:不可变性。
体现:1.当对字符串重新赋值时,需要重新指定内存区存储字域赋值,不能使用原有的Value进行赋值。
2.当对现有的字符串进行连接操作时,也需要重新指定内存区域赋值,不能使用原有的Value进行赋值。
3.当调用String的replace()方法修改指定的字符或字符串时,也需要重新指定内存区域赋值,不能使用原有的Value进行赋值。
5.通过字面量的方式(区别于new)给一个字符串赋值,此时的字符串值声明在字符串常量池中。
6.字符串常量池中是不会存储相同内容的字符串的。
*/
@Test
public void test1(){
String s1="abc";//字面量
String s2="abc";
// s1="hello";
System.out.println(s1 == s2);//比较s1和s2的地址值
System.out.println(s1);//hello
System.out.println(s2);//abc
System.out.println("************");
String s3="abc";
s3+="def";
System.out.println(s3);//abcdef
System.out.println(s2);//abc
String s4="abc";
String s5 = s4.replace('a', 'm');
System.out.println(s4);//abc
System.out.println(s5);//mbc
}
}
*
- String类常用方法
*
*
package com.obj.test.string;
public class Test1 {
public static void main(String[] args) {
String str1 = new String("abcdefg");
String str2 ="abcdefg";
String str3 ="abcdEFG";
String str4 = "def";
System.out.println(str1==str2); //false
System.out.println(str1);
System.out.println(str2);
//设计到字符串比较的时候,都用equals方法
System.out.println(str1.equals(str2)); //true
System.out.println(str1.length()); //7
//
System.out.println(str2.charAt(0));
System.out.println(str2.charAt(6)); //str2.length-com.1
System.out.println(str1.charAt(str2.length()-1)); //取字符串最后一个字符
System.out.println(str2.equals(str3));
System.out.println(str2.equalsIgnoreCase(str3)); //忽略大小写
//从开头到结尾查找,返回找到的第一个子字符串位置。如未找到,返回-com.1
System.out.println(str2.indexOf("def")); //结果:3 //str2="abcdefg"
System.out.println("abcdefg".indexOf("DF")); //结果:-com.1
//从末尾开始查找
System.out.println("abcdefgdefg".lastIndexOf("def")); //结果:7
//字符串的替换
String str5 = "abcdefg".replace('d','p');
System.out.println(str5);
String str6 = "abcdbcd".replace("cd","HELLO");
System.out.println(str6); //abHELLObHELLO
System.out.println("sxt,i love u".startsWith("sxt"));//true
System.out.println("sxt,i love u".endsWith("sxt"));//false
//截取字符串
String str7 = "abcdefghijklmnopqrstuvwxyz".substring(6);
System.out.println(str7); //ghijklmnopqrstuvwxyz
String str8 = "abcdefghijklmnopqrstuvwxyz".substring(6,11);//6--(11-com.1)包头不包尾
System.out.println(str8); //ghijk
System.out.println("abcdE".toUpperCase());//变大写
System.out.println("abcdE".toLowerCase());//变小写
String str9 = " a b ";//长度7 //用户名:gaoqi
String str10=str9.trim();//去除首尾空格
System.out.println(str10.length());
System.out.println(str10);
//String是不可变字符序列。所有的替换、截取子字符串、去空格、转换大小写等都是生成新字符串
System.out.println(str9.replace(" ",""));//去空格
System.out.println(str9);
}
}
- String类与其他类的转换
package com.day0216_1;
import org.junit.jupiter.api.Test;
import java.io.UnsupportedEncodingException;
import java.util.Arrays;
/**
* 涉及到String类与其他类的转换
*/
public class StringTest1 {
/*
String与byte[]之间的转换
编码:String-->byte[]:调用String的getBytes()
解码:byte[]-->String:调用String的构造器
*/
@Test
public void test3() throws UnsupportedEncodingException {
String str1="abc123中国";
byte[] bytes = str1.getBytes();//使用默认的字符集,进行编码//UTF-8
System.out.println(Arrays.toString(bytes));
byte[] gbks=str1.getBytes("gbk");//使用gbk的字符集,进行编码
System.out.println(Arrays.toString(gbks));
System.out.println("*****************");
String str2 = new String(bytes);//使用默认的字符集,进行解码//UTF-8
System.out.println(str2);
String str3 = new String(gbks);
System.out.println(str3);//出现乱码,原因是编码集与解码集不一致!
String str4 = new String(gbks, "gbk");
System.out.println(str4);//没有出现乱码,原因是编码集与解码集一致!
}
/*
String与char[]之间的转换
String-->char[]:调用String的toCharArray()
char[]-->String:调用String的构造器
*/
@Test
public void test2(){
String str1="abc123";
char[] charArray = str1.toCharArray();
for (int i = 0; i < charArray.length; i++) {
System.out.println(charArray[i]);
}
char[] arr=new char[]{'h','e','l','l','o'};
String str2 = new String(arr);
System.out.println(str2);
}
/*
复习:
String 与基本数据类型、包装类之间的转换。
String -->基本数据类型、包装类:调用包装类的静态方法:parseXxx(str)
基本数据类型、包装类--> String:调用String重载的ValueOf(xxx)
*/
@Test
public void test1(){
String str1="123";//字符串常量池中
int num=Integer.parseInt(str1);
String str2=String.valueOf(num);//"123"
String str3=num+"";//堆中
System.out.println(str1=str3);//false
}
}