String str=new String("abc");创建对象个数计算
2015-09-18 14:49
344 查看
转载出:http://www.cnblogs.com/ydpvictor/archive/2012/09/09/2677260.html
栈(stack):主要保存基本类型(或者叫内置类型)
堆(heap):用于存储对象
1、在声明一个变量时,是不会有对象,仅仅只是声明了一个引用,并且只是在栈内创建了一个引用变量。如:
2、
3、
由于JVM存在一个字符串常量池,其中保存了很对String类型的对象,并且可以共享,因此提高了运行效率;因为常量池内的String类型对象是final型的,所以不用担心因为共享而导致程序混乱。我们可以通过调用JVM的intern()方法来访问字符常量池。
在创建str时,首先查看是否已经存在aba、cd常量,如果存在,则直接调用,在组合创建abacd,同样,首先判断是否存在该对象,
4、
public String(String original) { //other code … } 大家都知道,我们常用的创建一个类的实例(对象)的方法有以下两种:
一、使用new创建对象。
二、调用Class类的newInstance方法,利用反射机制创建对象。
我们正是使用new调用了String类的上面那个构造器方法创建了一个对象,并将它的引用赋值给了str变量。同时我们注意到,被调用的构造器方法接受的参数也是一个String对象,这个对象正是”abc”。由此我们又要引入另外一种创建String对象的方式的讨论——引号内包含文本。
栈(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对象的方式的讨论——引号内包含文本。
相关文章推荐
- kali-linux 安装流程
- android处理不标准的json字符串
- zabbix------监控H3C MSR路由器
- 通过httprequest获取用户ip
- 【转载】AngularJS 用$sce服务来过滤HTML标签,解决无法正确显示后台传递的html标签
- request对象的getAttribute()和getParameter()方法
- 九宫格应用视图创建
- 关于htc m9w更新后手机无限重启的解决办法
- linux管理rpm包
- Python字符编码学习理解
- 纯CSS实现的三级导航菜单效果代码
- 网易游戏2016校园招聘“游戏研发&平台开发”在线笔试——C题 Complicated Expression
- oracle数据库拷贝
- 移动端如何定义字体font-family
- 策略模式与简单工厂模式区别(转)
- 从B树、B+树、B*树谈到R 树
- 线性回归 and Logistic回归
- TCP3次握手和backlog溢出
- TCP3次握手和backlog溢出
- TCP3次握手和backlog溢出