黑马程序员技术交流社区

标题: 关于String的问题! [打印本页]

作者: 七弦    时间: 2014-5-24 21:54
标题: 关于String的问题!

String这个类型的class为什么要定义成final?


作者: leo_lzj    时间: 2014-5-24 22:14
明确两点:
1、一个双引号就是一个对象;
2、创建一个字符串并初始化赋值,则这个字符串值就固定存在了内存当中,不能被改变
举个例子:
  1. public class Test2 {
  2.         public static void main(String[] args) {
  3.                 String str="abc";
  4.                 String str1=new String("abc");
  5.                 str ="haha";
  6.                 System.out.println(str);//打印 haha
  7.                 System.out.println(str==str1);//flase
  8.                 System.out.println(str.equals(str1));//flase
  9.         }
  10. }
复制代码
上面代码中,
String str="abc";这一句创建了一个对象,String str1=new String("abc");创建了两个对象:一个abc,一个new均放在堆内存中,str和str1放在栈内存中;

实际上abc这个对象被创建后就固定了,不能不改变,因此String类型是finall,如果再给str赋值,改变的是str所引用的堆内存中haha的地址值,因此打印haha;
后面两句打印结果都为假,说明是两个不同的对象,不仅栈内存中地址不同,对象实体中的内容也不相同。

作者: yinxjfly    时间: 2014-5-25 16:26
到位的回答!
作者: 路漫漫_求索    时间: 2014-5-25 23:59
String str = new String("abc");
String类创建的对象,一经创建就不可改变,所以是final




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2