1.只使用常量对对象进行赋值,只会在常量去创建对象;
String name = "11";
String s1="Java";
String s2="Java";
System.out.println(s1==s2); true
2.使用new关键字创建对象,会在常量区和堆区都创建对象,并且引用为堆区对象;
String s1=new String("Java");
String s1=new String("Java");
String s2= new String("Java");
System.out.println(s1==s2); false
只在常量池 中定义
String s1="hello world";
String s2="hello "+"world";
System.out.println(s1==s2); true
3.传递参数的时候只传递 字段变量的副本
输出 11
public class test1 {
public static void main(String[] args) {
String name = "11";
setStr(name);
}
public static void setStr(String name) {
name = "22";
}
}
4.String、StringBuiler、StringBuffer的用法和区别
String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者的对象是变量,是可以更改的
StringBuilder是线程不安全的,而StringBuffer是线程安全的
String:适用于少量的字符串操作的情况
StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况