您的位置:首页 > 其它

String str=new String("abc");创建对象个数计算

2015-09-18 14:49 344 查看
转载出:http://www.cnblogs.com/ydpvictor/archive/2012/09/09/2677260.html

栈(stack):主要保存基本类型(或者叫内置类型)
(char、byte、short、int、long、float、double、boolean)
和对象的引用,数据可以共享,速度仅次于寄存器(register),快于堆。

堆(heap):用于存储对象

1、在声明一个变量时,是不会有对象,仅仅只是声明了一个引用,并且只是在栈内创建了一个引用变量。如:
String str;


2、
String str = "aba";
有一个对象,”aba”是存放在堆中的对象,str是在栈中对象的引用。

3、
String str = "aba" + "cd";
有三个对象,分别是”aba”,”cd”,”abacd”三个堆对象。

由于JVM存在一个字符串常量池,其中保存了很对String类型的对象,并且可以共享,因此提高了运行效率;因为常量池内的String类型对象是final型的,所以不用担心因为共享而导致程序混乱。我们可以通过调用JVM的intern()方法来访问字符常量池。

在创建str时,首先查看是否已经存在aba、cd常量,如果存在,则直接调用,在组合创建abacd,同样,首先判断是否存在该对象,

4、
String str = new String("abc");
有两个对象,

public String(String original) { //other code … } 大家都知道,我们常用的创建一个类的实例(对象)的方法有以下两种:

一、使用new创建对象。

二、调用Class类的newInstance方法,利用反射机制创建对象。

我们正是使用new调用了String类的上面那个构造器方法创建了一个对象,并将它的引用赋值给了str变量。同时我们注意到,被调用的构造器方法接受的参数也是一个String对象,这个对象正是”abc”。由此我们又要引入另外一种创建String对象的方式的讨论——引号内包含文本。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: