Android中的java基础(三)——String的不可变性
2017-01-15 18:37
525 查看
那么先开始讲String String 对象的不可变性,例如
String a = "1";
a = "2";
这时候实际内存是存在"1",“2”这两个对象,具体的位置是在文字池(pool
of literal strings),运行文字池其实是常量池的一部分。
可以理解为每次String改变,并不是改变了此对象,而是重新建立了一个新的对象。而StringBuilder与StringBuffer可以在原始对象上进行变化更改。
例如一下代码:
我们变量命名规则依然是m+是否new+对象类型+数值+区别符,以下是运行结果
(mString2a==mString2b) -->true //这个验证了都是指向文字池的两个不同的变量,他们的文字内容一致,我们通过==等号盘点,他们指向了同一个地方。
(mString2b==mNewString2a)-->false //这里虽然值相等,但是mNewString2a指向了一个堆区对象,两个变量直接通过等号无法判等。
(mNewString2a==mNewString2b) -->false
//这里虽然值也相等,但是mNewString2a与mNewString2a指向了堆区不同的对象,两个变量直接通过等号无法判等堆区地址。
对于mString2a可以理解如果文字池没有"2"的时候,则会创建一个对象"2",之后mString2b不会再创建一个对象"2",而mNewString2a、mNewString2b则会分别在堆区创建一个对象,从而在刚刚的这个代码段的过程中,创建了最多3个不同的对象。
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个不同的对象。
相关文章推荐
- Java基础:String不可变性和final修饰
- Java基础:String不可变性和final修饰
- 【Java基础】JAVA不可变类(immutable)机制与String的不可变性
- java基础解析系列(九)---String不可变性分析
- android基础篇------------java基础(3) (数组和String的应用)
- Java中String类型的不可变性和驻留池
- 字符 深入理解java String 对象的不可变性
- JAVA不可变类(immutable)机制与String的不可变性
- 深入理解java String 对象的不可变性
- JAVA不可变类(immutable)机制与String的不可变性
- Java基础查漏补缺:String为什么不可修改
- Java中的String的 方法归类 及其 不可变性
- java之String对象的不可变性
- Java问题探讨之String的不可变性
- Java中String类型的不可变性和驻留池
- 【重走Android之路】【Java面向对象基础(二)】细说String、StringBuffer和StringBuilder
- java基础入门-你不知道的string-不可改变性与编译器优化
- Java基础:泛型及其擦除性、不可协变性
- JAVA不可变类(immutable)机制与String的不可变性
- Java中String对象的不可变性