创建方法
1、直接赋值法
public class Try {
public static void main(String[] args) {
String name = "Tom";
}
}
代码原理:在执行“String name = "Tom";”代码时,JVM在常量池中开辟一个存放“Tom”字符串的空间并让name指向该对象。
所以说代码中的“=”其实是赋予地址的意思,而不是直接把字符串“Tom”赋给name。
2、使用new构造方法
public class Try2 {
public static void main(String[] args) {
String address = new String("莲花街");
}
}
代码原理:执行“String address = new String("莲花街");”时,JVM直接创建一个新的对象并让address指向该对象
创建方法的区别
1、直接赋值法
当对象存入常量池中后,JVM在创建对象前会先去常量池寻找是否存在一个字符串内容与当前字符串相同,如有,则将已有的字符串地址赋给变量;若无,则创建新的对象。
例如
public class Test {
public static void main(String[] args) {
String name = "Tom";
String name2 = "Tom";
String name3 = "Jim";
System.out.println(name == name2);
System.out.println(name == name2);
}
}
代码运行结果为:
true
false
2、使用new构造方法
每当使用一次new构造方法创建String对象时,JVM就会直接在Java内存区的“堆”中创建新的对象,并把新的对象的地址赋给变量。
例如
public class New {
public static void main(String[] args) {
String address = new String("莲花街");
String address2 = new String("升龙街");
System.out.println(address == address2);
}
}
运行结果为:
false
附:使用“==”判断是否相同
1、对于基本数据类型,“==”直接判断变量的数值是否相同
例如
public class Try2 {
public static void main(String[] args) {
int age = 12;
int age2 = 12;
System.out.println(age == age2);
}
}
运行结果为:
true
2、对于引用数据类型,“==”会判断变量中存放的地址是否相同
例如
public class Try {
public static void main(String[] args) {
Object ob1 = new Object();
Object ob2 = new Object();
System.out.println(ob1 == ob2);
}
}
运行结果为:
false