资讯专栏INFORMATION COLUMN

JAVA String 源码分析与final关键字

NickZhou / 3259人阅读

摘要:关键字在声明一个对象时有两种用法,第一种,在使用这个类的时候声明,就像这样不合法可以向对象加数据。第二种,在定义这个类的时候使用关键字比如这种他仅仅表示不能被继承。因此,定义类使用关键字与在类中间声明一个是对象成员变量是的作用是不一样。

String不可变的是参考这里。
http://www.2cto.com/kf/201401/272974.html
String 不可变得一个重要原因是因为String被声明成了final类,但是观察Stringbuffer也被声明成了final类。所以,String 不可变得原因不是因为其在声明的时候声明生了final,而是在各种方法的内部都是return了一个新的对象,所以String是不可修改的。
final关键字在声明一个对象时有两种用法,第一种,在使用这个类的时候声明,就像这样:

javapublic class Day01 {
    private static final List Loans = new ArrayList();
    public static void main(String[] args) {
    Loans.add("xxx");
        Loans = new Vector(); //不合法
    }
}

可以向对象加数据。但是不能使他的引用指向另外一个对象。
第二种,在定义这个类的时候使用final关键字:
比如这种:

javapublic final class String{

}

他仅仅表示不能被继承。但是他的引用依然能够指向其他的对象:

java    String   a="ccc";
     a="bbbb";

一个例子:

javapublic  final  class HelloWorld {
    private  String  name;
    private  String  age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAge() {
        return age;
    }
    public void setAge(String age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "HelloWorld [name=" + name + ", age=" + age + "]";
    }
}
public class Day01 {

    private static final List Loans = new ArrayList();


    public static void main(String[] args) {
         HelloWorld  a=new HelloWorld();
         a.setName("x");
         a=new  HelloWorld();
         a.setName("y");
    }

}

在定义类的时候声明这个类是final的,但是它的引用依然可以指向别的对象。因此,定义类使用final关键字与在类中间声明一个是对象成员变量是final的作用是不一样。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/64346.html

相关文章

  • 源码|jdk源码之Object及装箱类型分析

    摘要:作为条件变量的的不仅可以认为内嵌了一把锁,还内嵌了一个条件变量。操作条件变量的函数将当前线程在条件变量上阻塞,一般是为了等待其他线程的某件事情执行完成。其它装箱类其它装箱类的代码这里就不分析了。重点关注下各装箱类的缓存范围。 jdk源码读到现在这里,重要的集合类也读了一部分了。集合类再往下读的话,就要涉及到两个方向。第一,是比较典型的但是不常用的数据结构,这部分我准备将数据结构复习、回...

    VioletJack 评论0 收藏0
  • Java语法糖的编译结果分析(二)

    摘要:因此,对应地我们可以翻译这段二进制字节码为这样的代码注意,这段代码并不能通过编译,因为源码这一层是不允许直接继承的,这个继承过程只允许在编译器内部解语法糖的过程中被编译器添加,添加之后的类才会有的访问标识符。 语法糖(Syntactic Sugar)的出现是为了降低我们编写某些代码时陷入的重复或繁琐,这使得我们使用语法糖后可以写出简明而优雅的代码。在Java中不加工的语法糖代码运行时可...

    LeviDing 评论0 收藏0
  • 分析 JDK 源码

    Object 相关概念 Object 是 java 中的顶级父类,它是所有类的超类,所有对象以及数组均会实现这个类提供的方法 JVM 在编译源码过程中,遇到没有继承 Object 的对象时,编译器会指定默认父类 Object 接口没有继承顶级父类,但会隐式的声明一套和 Object 中的方法签名完全一样的方法,这也就符合万物皆对象的面向对象思想,任何对象直接或间接的跟 Object 对象有关 O...

    godruoyi 评论0 收藏0
  • 深入研究Java String

    摘要:所以我决定先从类入手,深入的研究一番来开个好头。之所以会有以上的效果,是因为有字符串常量池的存在。同时运行时实例创建的全局字符串常量池中有一个表,总是为池中的每个字符串对象维护一个引用,所以这些对象不会被。 开始写 Java 一年来,一直都是遇到什么问题再去解决,还没有主动的深入的去学习过 Java 语言的特性和深入阅读 JDK 的源码。既然决定今后靠 Java吃饭,还是得花些心思在上...

    番茄西红柿 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<