zoukankan      html  css  js  c++  java
  • String StringBuffer StringBuilder

    1.string

      String是不可变类:

        String不是基本数据类型,而是一个对象,并且是final类型的,不可变的。(public static class String)

        例如:

        代码:String text = "a"; text = "b";

      String不是不可变的么?为什么可以这样用?因为text是字符串"a"的引用,即引用是可以变化的,跟对象实例的属性变化没有关系。(这里创建的是两个String对象)

      String设计成不可变的原因:

        字符串常量池是Java方法区中的一个特殊的存储区域,当创建一个String对象时,假如这个字符串已经在常量池中了,就不会创建一个新的对象,而是引用已经存在的对象。常量池指的是在编译期被确定,并保存在已编译的.class文件中的一些数据。它包括了关于类,方法,接口中的常量,也包括字符串常量

      String text1 = "abc"; String text2 = "abc"; 

      上面的代码只会在堆内存中创建一个实际的String对象。如果字符串对象允许改变的话,那么会导致各种逻辑错误,比如改变一个对象会影响到另一个独立对象。

      栈(stack):主要保存基本数据类型和对象的引用,数据可以共享,速度仅次于寄存器(register),快于堆

      堆(heap):用于存储对象

      安全性,因为字符串是不可变的,所以线程是安全的,同一个字符串实例可以被多个线程共享。这样便不用因为线程安全问题而使用同步。字符串本身是线程安全的。

    1.StringBuffer,StringBuilder

      StringBuffer:

        StringBuffer和String一样都是用来存储字符串的,只不过他们内部的实现方式不一样,导致他们所使用的范围不同,对于StringBuffer,它在处理字符串的时候,如果是进行修改操作,并不会产生一个新的字符串对象。

        StringBuffer的许多方法和String差不多,只不过修改时StringBuffer是修改自身的,而String类则是产生一个新的对象,这是他们最大的区别。

        同时,StringBuffer是不能通过=来进行初始化的,它必须通过构造方法来进行初始化。

      StringBuilder:

        StringBuilder和StringBuffer的不同之处在于StringBuilder是线程不安全的,StringBuffer是线程安全的。

      附:equals()是用来比较两个值的,==会比较两个引用

    String字符串与BufferString的传递问题

    • 基本数据类型的值传递,不改变其值;引用数据类型的值传递,改变其值

    • String类虽然是引用数据类型,但是他当作参数传递时和基本数据类型是一样的

      

  • 相关阅读:
    Java实现 蓝桥杯VIP 算法提高 阮小二买彩票
    Java实现 蓝桥杯VIP 算法提高 传染病控制
    Java实现 蓝桥杯VIP 算法提高 传染病控制
    Java实现 蓝桥杯VIP 算法提高 传染病控制
    Java实现 蓝桥杯VIP 算法提高 传染病控制
    Java实现 蓝桥杯VIP 算法提高 传染病控制
    Java实现 蓝桥杯VIP 算法提高 企业奖金发放
    Java实现 蓝桥杯VIP 算法提高 企业奖金发放
    让程序后台隐藏运行
    只要你喜欢,并且可以养家糊口,就是好的
  • 原文地址:https://www.cnblogs.com/yzf666/p/6483392.html
Copyright © 2011-2022 走看看