版权声明:木心 https://blog.csdn.net/sinat_41642067/article/details/84702458
String是不变对象,JVM对String有一个优化:常量池 当使用字面量形式创建字符串对象时,JVM会将其缓存在常量池中,当再次使用该字面量创建字符串对象时就重用对象,避免内存中堆积大量内容一样的字符串对象,减少内存开销。
一个计算表达式参与运算的内容是确定值时,编译器会进行计算然后编译到.class文件中,避免JVM每次执行程序的时候再做运算。
字符串为不变对象,一旦创建内容不可修改。若改变则创建新对象。
public class StringDemo {
public static void main(String[] args) {
String s1="1a";
String s2="1a";
String s3="1a";
String s4="1"+"a";
String s5="1";
String s6=s5+"a";
String s7=new String("1a");
System.out.println(s1==s2);//true
System.out.println(s1==s3);//true
System.out.println(s1==s4);//true
System.out.println(s1==s6);//false
System.out.println(s1==s7);//false
s1=s1+".";//创建一个新的对象
System.out.println(s1);
System.out.println(s2);
System.out.println(s2==s1);//false
}
}
int length( ):获取当前字符串长度,不论什么字符都是一个长度
int indexOf(String str):获取给定字符串在当前字符串中位置,没有返回-1
int indexOf(String str,int pos)
int lastIndexOf(String str)
char charAt(int index):获取给定位置字符
这里有一个判断回文的案例:
public class CharAt {
public static void main(String[] args) {
String string2="上海自来水来自海上";
boolean check=true;
for (int i = 0; i < string2.length()/2; i++) {
if (string2.charAt(i)!=
string2.charAt(string2.length()-1-i)) {
System.out.println("不是回文");
break;
}
}
System.out.println("是回文");
}
}
boolean startsWith(String str)
boolean endsWith(String str)
判断字符串是否以给定的字符串开始或结尾的
String subString(int start,int end)
截取指定范围内的字符串,区间左闭右开
trim( ):省去前面和后面的空白和缩进
String toUpperCase( )
String toLowerCase( )
英文转换为全大写或小写(验证码中常用)
字符串提供了一组重载的valueOf方法,可以将其他类型转换为字符串,但注意这是一组静态方法,通过类名.调用
这里有一个实现给定地址截取域名的综合案例。
public class Test {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
String string=scanner.nextLine();
System.out.println(getName(string));
}
/**
* 获取给定地址的域名
* @param string 给定的地址
* @return 域名
*/
public static String getName(String string) {
int frontPoint=string.indexOf(".");
int behindPoint=string.indexOf(".",frontPoint+1);
return string.substring(frontPoint+1, behindPoint);
}
}