A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 七弦 中级黑马   /  2014-5-24 21:54  /  1135 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


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

5 个回复

倒序浏览
明确两点:
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;
后面两句打印结果都为假,说明是两个不同的对象,不仅栈内存中地址不同,对象实体中的内容也不相同。
回复 使用道具 举报
到位的回答!
回复 使用道具 举报
String str = new String("abc");
String类创建的对象,一经创建就不可改变,所以是final
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马