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

转载出: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对象的方式的讨论——引号内包含文本。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值