关于String a=new String("a")创建几个对象问题的正确答案
我们知道String是个不可变的常理,每次赋值都会创建一个对象,但是今天遇到个问题,String a=new String("a")创建了几个对象?
首先我举个列子来复习下String;
String s="Hellow";
s="android";
String str="android";
String s=new String("a");
在jvm的工作过程中,会创建一片的内存空间专门存入string对象。我们把这片内存空间叫做string池。
我们先来看下String s="Hellow",定义了一个String s的变量,“Hellow”为String 对象,当JVM检查到“Hellow”的时候。如果string池中有“Hellow”对象,就直接把其引用给s不会重新创建string对象,如果没有就创建string对象,并将其引用给s。这里没有就创建string对象
再来看下s="android";同样当JVM检查到“android”的时候。如果string池中有“android”对象,就直接把其引用给s不会重新创建string对象,如果没有就创建string对象,并将其引用给s。这样也没有就创建string对象.
所以
String s="Hellow";
s="android";就创建了两个对象。
String str="android";再来看下,我们定义了一个str的字符串。并将“"android"”对象引用给他,上面提到JVM检查到”android“,就将其引用给str,由于上面s="android"已经创建了"android"string对象,所以这里就直接将"android"对象引用给str,并且str==s.因为两个字符串引用相同。
最后String s=new String("a");
"a",JVM检查没有就创建,有就引用,
new String这里又手动创建了一个string对象.
因此String a=new String("a")一共创建了两个对象
更多相关文章
- Android(安卓)Activity启动(二) App内部activity跳转过程及原理
- android开发之Parcelable使用详解
- 《Android/OPhone开发完全讲义》连载(7):使用SharedPreferences存
- 基于 AVOS Cloud 的 Android(安卓)应用程序快速开发简介
- android开发中常用的设计模式汇总
- Mac下搭建 Android(安卓)反编译环境
- Android开发之TextView高级应用
- 《BAT大咖助力 全面升级Android面试笔记》学习笔记
- phonegap底层原理学习和研究(一)