== 和 equals 的区别是什么
- 基本类型:比较的是值是否相同;
- 引用类型:比较的是引用是否相同;
String x = "string";
String y = "string";
String z = new String("string");
System.out.println(x==y); // true
System.out.println(x==z); // false
System.out.println(x.equals(y)); // true
System.out.println(x.equals(z)); // true
执行步骤:
当执行String x = "string"时候,编译器首先会在常量池中寻找有没有"string"这个字符串,如果有则直接从常量池中取,不会new,如果常量池中没有,则会new一个,并将"string"存放到常量池中。
所以执行String y = “string”;的时候是将y变量也指向了常量池中的"string"
而String z = new String(“string”)则是编译器直接new一个字符串,不会到常量池中查询
所以z变量的引用是独立的。