我们知道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")一共创建了两个对象

更多相关文章

  1. Android(安卓)Activity启动(二) App内部activity跳转过程及原理
  2. android开发之Parcelable使用详解
  3. 《Android/OPhone开发完全讲义》连载(7):使用SharedPreferences存
  4. 基于 AVOS Cloud 的 Android(安卓)应用程序快速开发简介
  5. android开发中常用的设计模式汇总
  6. Mac下搭建 Android(安卓)反编译环境
  7. Android开发之TextView高级应用
  8. 《BAT大咖助力 全面升级Android面试笔记》学习笔记
  9. phonegap底层原理学习和研究(一)

随机推荐

  1. xmlns的作用
  2. Handler+Messagequeue+looper
  3. android 设置特殊字体
  4. Android 使用ViewStub 实现多状态页面切
  5. Android菜鸟的成长笔记——Android Studi
  6. android线程池的封装工具类
  7. Android上传图片到服务器,android-async-h
  8. 动画·界面
  9. android震动器类Vibrator
  10. 按键及其居中