Android中的java基础(三)——String的不可变性
来源:互联网 发布:网站运营数据 编辑:程序博客网 时间:2024/05/29 11:07
那么先开始讲String String 对象的不可变性,例如
String a = "1";
a = "2";
这时候实际内存是存在"1",“2”这两个对象,具体的位置是在文字池(pool of literal strings),运行文字池其实是常量池的一部分。
可以理解为每次String改变,并不是改变了此对象,而是重新建立了一个新的对象。而StringBuilder与StringBuffer可以在原始对象上进行变化更改。
例如一下代码:
//测试String型是否相同String mString2a ="2";String mString2b = "2";String mNewString2a = new String("2");String mNewString2b = new String("2");System.out.println("(mString2a==mString2b) -->"+(mString2a==mString2b));System.out.println("(mString2b==mNewString2a)-->"+(mString2b==mNewString2a));System.out.println("(mNewString2a==mNewString2b) -->"+(mNewString2a==mNewString2b));
我们变量命名规则依然是m+是否new+对象类型+数值+区别符,以下是运行结果
(mString2a==mString2b) -->true //这个验证了都是指向文字池的两个不同的变量,他们的文字内容一致,我们通过==等号盘点,他们指向了同一个地方。(mString2b==mNewString2a)-->false //这里虽然值相等,但是mNewString2a指向了一个堆区对象,两个变量直接通过等号无法判等。(mNewString2a==mNewString2b) -->false //这里虽然值也相等,但是mNewString2a与mNewString2a指向了堆区不同的对象,两个变量直接通过等号无法判等堆区地址。
对于mString2a可以理解如果文字池没有"2"的时候,则会创建一个对象"2",之后mString2b不会再创建一个对象"2",而mNewString2a、mNewString2b则会分别在堆区创建一个对象,从而在刚刚的这个代码段的过程中,创建了最多3个不同的对象。
1 0
- Android中的java基础(三)——String的不可变性
- Java中的String的 方法归类 及其 不可变性
- String的不可变性
- String的不可变性
- String的不可变性
- String的不可变性
- java之String对象的不可变性
- java学习笔记24——String类不可变性
- 图解Java String不可变性
- Java基础:String不可变性和final修饰
- String类的不可变性
- String 类的不可变性
- String对象的不可变性
- java基础入门-你不知道的string-不可改变性与编译器优化
- 详细讲解Java中的方法参数传递机制,介绍string的不可变性
- Java中String类型的不可变性和驻留池
- 深入理解java String 对象的不可变性
- Java中String类不可变性的好处
- java ansj5.0.1自定义词典
- HDu-1247 Hat’s Words,字典树裸模板!
- 选夫婿2
- 二进制包安装mysql-5.1.73
- WINDOWS中tomcat改变内存大小
- Android中的java基础(三)——String的不可变性
- 高通平台常用缩写
- linux运维学习第三课
- CMake link_directories, LINK_LIBRARIES, target_link_libraries使用总结
- 或许你的Java面试只是差这点吧!
- AndroidMainfest.xml详解——<intent-filter>
- 亚玛芬体育(Amer Sports)和信必优正式启动合作开发Movesense创新
- 冒泡排序
- Node核心模块之fs