String说明:
String声明为final,不可被继承;
String实现了Serializebla接口,表明是字符串是支持可序列化的;
String实现了Comparable接口,表明String是可以比较大小的;
通过字面量方式的方式给字符串赋值,此时字符串值声明在字符串常量池中(字符串常量池中不会存储相同的内容的字符串)
String代表不可变的字符序列,具有不可变性
- 当对字符串常量重新赋值后,需要在指定内存区重新赋值,不能对原有value直接修改赋值
- 当对字符串进行连接操作,需要在指定内存区重新赋值,不能对原有value直接进行操作
- 当使用replace()方法对字符或字符串进行替换时,也需要在指定内存区重新赋值,不能对原有value直接进行操作
字面量与构造器创建String的区别
public class StringTest {
@Test
public void test(){
//字面量声明字符串:s与s1的数据放在字符串常量池中
String s = "hello";
String s1 = "hello";
System.out.println(s==s1); //true 常量池中同一个数据值
//new + 构造器的方式:s2与s3保存的地址值,是数据在堆空间开辟空间后对应的地址值
String s2 = new String("yes");
String s3 = new String("no");
System.out.println(s2==s3);//指向堆中不同地址值
}
}
常量与常量做连接操作,结果在常量池中;只要连接操作有一个是变量,则结果在堆空间中;
String常用方法:
//String --> char[] 调用String的toCharArray()方法
String s4 = "hello";
char[] c = s4.toCharArray();
for (int i = 0; i < c.length; i++) {
System.out.println(c[i]);
}
//char[] --> String 调用String的构造器
char[] c1 = new char[]{'w','o','r','l','d'};
String s5 = new String(c1);
System.out.println(s5);
//String --> byte[] 调用String的getBytes()方法
String s6 = "abc";
byte[] b = s6.getBytes();
System.out.println(Arrays.toString(b)); // [97, 98, 99]
public class String1{
public static void main(String[] args) {
/*
String str = "hello";
1 截取出str的第一个字符
char c = str.charAt(0);
char[] data = str.toCharArray(); //将str字符串转化为字符数组
for (int i = 0; i<data.length; i++){
System.out.println(data[i]);
}
*/
/*
2 给定一个字符串,判断其是否由数字组成
String str = "1234o847290";
if (isNumber(str)){
System.out.println("字符串由数字组成");
}else{
System.out.println("字符串由非数字组成");
}
}
public static Boolean isNumber(String str){ //将主类方法声明为static,可以在主类中直接使用该方法,不必声明对象
char[] data = str.toCharArray();
for (int i =0; i<data.length; i++){
if (data[i] <'0' || data[i]>'9'){
return false;
}
}
return true;
*/
/* 3 字符串的比较
String str1 = "helloworld";
String str2 = "HelloWorld";
System.out.println(str1.equals(str2)); // 区别大小写比较两个字符串是否相等
System.out.println(str1.equalsIgnoreCase(str2)); //不区分大小写比较两个字符串是否相等
System.out.println(str2.compareTo(str1)); //比较两个字符串之间的关系,结果为大于0,小于0,或者等于0
*/
/*
//4 字符串的截取
String str = "anbdjhd";
String s1 = str.substring(3); //从指定索引截取到结尾
String s2 = str.substring(0,4); //部分截取[0,4)
System.out.println(s1+"\t"+s2);
*/
/*
//5 字符串的拆分
String str = "hello world you me he";
String result1[] = str.split(" "); //以空格作为拆分
String result2[] = str.split(""); //以字符串全部拆分
System.out.println(result2[6]);
*/
//判断是否为空字符串 strName.isEmpty()
String str = "abdbud";
String str1 = "";
System.out.println(str.isEmpty()); //false 非空
System.out.println(str1.isEmpty()); //true 空
System.out.println(initcap(str)); //实现字符串首字母大写
}
//首字母大写方法,定义为static型,可以在主类中直接调用
public static String initcap(String str){
//先将首字母转化为大写然后加上后面的字符串
String temp = str.substring(0,1).toUpperCase() + str.substring(1);
return temp;
}
}