明确两点:
1、一个双引号就是一个对象;
2、创建一个字符串并初始化赋值,则这个字符串值就固定存在了内存当中,不能被改变
举个例子:- public class Test2 {
- public static void main(String[] args) {
- String str="abc";
- String str1=new String("abc");
- str ="haha";
- System.out.println(str);//打印 haha
- System.out.println(str==str1);//flase
- System.out.println(str.equals(str1));//flase
- }
- }
复制代码 上面代码中,
String str="abc";这一句创建了一个对象,String str1=new String("abc");创建了两个对象:一个abc,一个new均放在堆内存中,str和str1放在栈内存中;
实际上abc这个对象被创建后就固定了,不能不改变,因此String类型是finall,如果再给str赋值,改变的是str所引用的堆内存中haha的地址值,因此打印haha;
后面两句打印结果都为假,说明是两个不同的对象,不仅栈内存中地址不同,对象实体中的内容也不相同。
|