- string类被关键字final修饰,代表该类不可被继承
- final修饰的方法不能被重写,
- final修饰的变量子只被赋值一次,string内部定义了final char[] value用于存储字符串数据,具有不可变性。String代表不可变的字符序列,即不可变性:
“=="比较的是两个变量的地址值,字符串相同的变量在存储中存放在同一个位置,即变量指向同一个位置。当要修改字符串变量的值时,会重新开辟一个存储位置存储该字符串,不会在原位置进行修改,在此印证了不可变性。当对现有的字符串进行连接操作时,也需要重新指定内存区域赋值,不能在原有区域赋值。当调用string的方法修改字符串时,也需要重新指定内存区域赋值。
equals()比较的是变量的值
String对象的创建
可以直接创建:(数据存放在方法区的字符串产常量池中)
String str = “hello”
也可以利用
string str=new string()
进行创建(此时str是数据在堆空间中开辟空间后以后对应的地址值) 此时str是指向堆中的地址值,对应的堆中的地址值又指向常量池中的地址,修改str后,对应的堆中的地址值又指向新的常量池中的地址
String s = new String(“abc”)方式常见对象,在内存中创建了两个对象,一个是堆中new结构,另一个是char[]对应的常量池中的数据:“abc”。
- 常量与常量的拼接结果在常量池中,且常量池中不会存在相同的内容的常量。
- 只要拼接中有一个是变量,结果就会在堆中。
- 只要拼接的结果调用intern(),返回值就在常量池中。
对于值传递: 基本数据类型传递的是传递的是数据,引用数据类型传递的是地址值。
什么是基本数据类型和引用数据类型? 数组是引用数据类型。
常用方法:
String s1 = "Hello world";
System.out.println(s1.length());//长度
System.out.println(s1.charAt(0));//获取对应索引位置的值
System.out.println(s1.charAt(3));
System.out.println(s1.isEmpty());
String s2 = s1.toLowerCase();//将字符串转小写,s1不变
System.out.println(s2);
System.out.println(s1);
String s3 = s1.toUpperCase();//将字符串转小写,s1不变
System.out.println(s3);
String s5 = " world";
String s6=s5.trim();//去除首尾的一个或多个空格
System.out.println(s5+"----"+s6);
System.out.println(s2.equals(s3));//判断支付穿的内容是否相同
System.out.println(s2.equalsIgnoreCase(s1));//忽略大小写的前提下再判断字符串内容是否相同
String s9 = s2.concat("def");//实现对字符串的拼接
System.out.println(s2+"----"+s9);
System.out.println(s9.compareTo(s2));//比较字符串大小,从前往后一个一个进行比较,只要不一样就会做减法,涉及到字符串排序
String s10 = s2.substring(2);//从原字符串中截取字符串
System.out.println(s10);
String s11 = s2.substring(2, 4);//截取字符串,大于等于2小于4
System.out.println(s11);
System.out.println(s2.endsWith("d"));//判断紫字符串是否以某字符串结尾
System.out.println(s2.startsWith("h") );//判断是否以某字符串开始
System.out.println(s2.startsWith("he",2));//字符串从2开始是否是以he开头
System.out.println(s2.contains("he"));//判断字符串中是否含有he字符串
System.out.println(s2.indexOf("he"));//判断字符串是否存在"he",如果存在则返回第一次出现时的索引位置
System.out.println(s2.indexOf("me"));//不存在则返回-1
System.out.println(s2.indexOf("lo",1));//2表示从某一位值开始找,返回出现的位置,没有则返回-1.
System.out.println(s2.lastIndexOf("ld"));//返回词字符串在最右边出现的位置
System.out.println(s2.lastIndexOf("ld",6) );//返回字字符串在此字符串中最后一次出现处的索引,从指定的索引开始反向搜索
System.out.println(s2.replace("l","r"));//替换某个字符
System.out.println(s2);
System.out.println(s2.replace("l","r") );//替换一段字符串,全部替换
System.out.println(s2);