s1=“123”;//这一步是让s1这个字符串类型的变量,记录了一个新的对象,并不是修改字符串,只能被整个替换
//String常见的构造方法
//1.空参数构造方法,注意String这个对象打印时不会打印出地址而是对应的值
String s2=new String();
System.out.println(s2);
//2.根据字符数组内容创建对象
char[] chs={‘a’,‘b’,‘c’};
String s3=new String(chs);//把字符串数组串成一个整体
System.out.println(chs);
//3.根据字符传入内容创建对象
String s4=new String(“123”);
System.out.println(s4);
//4.直接赋值
java程序中,所有的双引号字符串都是String这个类的对象
字符串是常量,创建之后不能被更改
String 常见的构造方法,构造方法一般是用来创建对象的
String的值不能被改变但是可以被共享
字符串常量池,当使用双引号创建字符串对象的时候,系统会检查该字符串是否在常量池中存在,不存在则创建,存在则不会重新创建直接复用
String s1=“abc”
String s2=“abc”
s1==s2 是true 因为abc已经存在直接复用即可
String s1=“abc” 常量池中地址
String s2=new String(“abc”)----false new出来的在堆内存两个地址不一样因此是false new String(“abc”)是创建了两个变量比较废内存
String s1=“abc”
String s2=“ab”
String s3=s2+“c”
s1==s3------>false
s1和s2都是常量池中的东西,s3通过字符串拼接会在堆内存中自动创建一个stringbuilder(001)对象 然后由于s3是String类型,
因此Stringbuilder会自动调用
toString方法将转换为String类型 存在堆内存当中(002地址)
如果是常量拼接,java中存在常量优化机制,在编译的时候就会将"a"+“b”+"c"自动拼接为abc
字符串比较:
基本类型:比较的是数据值是否相同
引用类型:比较的是地址值是否相同
比较内容是否相同调用equals()方法
equalsIgnoreCase()忽略大小写的比较//输入验证码可以用到



