String中字符串的内存地址
public static void main(String[] args) {
String a ="asd";
String b ="asd";
System.out.println(a==b);//true;
//==表示比较内存地址,这里没有创建新对象,字符串的内存地址是一样的
String x =new String("asd");
String y =new String("asd");
System.out.println(x==y);//false
// new了一个新对象,内存地址改变,所以为false;
System.out.println(a==x);//false
// new了一个新对象,内存地址改变,所以为false;
//如果要比较下x和y应该调equals方法
System.out.println(x.equals(y));
//也可这样,直接用此字符串比较
System.out.println("asd".equals(y));//推荐这样
//因为
String k = null;
System.out.println(k.equals(y));//true
System.out.println(y.equals(k));
//Exception in thread "main" java.lang.NullPointerExceptionat St.main(St.java:19)
//如果K为null时后者会报错;前者不会
}
}
以下程序创建了几个对象
```java
public static void main(String[] args) {
String x =new String("asd");
String y =new String("asd");
}
一共三个:方法区字符串常量池有一个“asd”
堆内存里有两个 String对象。