String s=new String("abc")共生成几个对象?
来源:互联网 发布:影楼修片用什么软件 编辑:程序博客网 时间:2024/06/06 12:44
非原创作品
如题;
回答:
生成了两个对象。
2个字符串对象,全部在堆中,只是创建时间不同。
一个叫inner String对象——对应于常量池中的字符串字面值,这个对象在第一次常量池解析的时候就已经创建,至于常量池解析在什么时候发生,不同的虚拟机实现不同,有的在类静态变量初始化之前,有的在执行方法指令时同时边解析边执行。常量池解析之后会存储指向这个堆中对象的引用
一个是new指令创建的String对象。在执行new指令的时候在堆中创建的。
String a="abc"; //创建了一个对象
String a="ab"+"cd"; //创建了三个对象"ab"和"cd"分别创建了一个对象,它们经过“+”连接后又创建了一个对象"abcd",因此一共三个,并且它们都被保存在字符串池里了。
栈(stack):主要保存基本类型(或者叫内置类型)(char、byte、short、int、long、float、double、boolean)和对象的引用,数据可以共享,速度仅次于寄存器(register),快于堆。
堆(heap):用于存储对象。
测试:
public class StringObject {String str = new String("abc");}
Compiled from "StringObject.java"public class com.unison.test.StringObject extends java.lang.Object{java.lang.String str;public com.unison.test.StringObject(); Code: 0:aload_0 1:invokespecial#10; //Method java/lang/Object."<init>":()V 4:aload_0 5:new#12; //class java/lang/String 8:dup 9:ldc#14; //String abc 11:invokespecial#16; //Method java/lang/String."<init>":(Ljava/lang/String;)V 14:putfield#19; //Field str:Ljava/lang/String; 17:return}
附录
反汇编器-javap
javap命令反汇编一个java字节代码文件, 返回有关可变部分和成员函数的信息,其命令行如下:
C:\>javap options classname additionalClasses
javap的标准输出是公有变量和类的成员函数。javap反汇编器的命令行选项如下表:
此段文字摘自:http://www.it315.org/articles/Java/java4.htm
- String s=new String("abc")共生成几个对象?
- String s=new String("abc")创建了几个对象?
- String s=new String("abc")创建了几个对象?
- String s=new String("abc")创建了几个对象?
- String s=new String("abc")创建了几个对象?
- String s=new String("abc")创建了几个对象?
- String s=new String("abc")创建了几个对象?
- String s=new String("abc")创建了几个对象
- String s=new String("abc")创建了几个对象?
- String s=new String("abc")创建了几个对象?
- String s=new String("abc")创建了几个对象?
- String s=new String("abc") 创建了几个对象?
- String s=new String("abc")创建了几个对象?
- String s=new String("abc")创建了几个对象?
- String s=new String("abc")创建了几个对象?
- String s=new String("abc")创建了几个对象?
- String s=new String("abc")创建了几个对象?
- String s=new String("abc")创建了几个对象?
- My_Java之笔记(6)- 完美equals()的定义
- lua脚本加载问题
- J2EE的13种规范
- hibernate的ID生成策略(annotation方式@GeneratedValue)
- PetShop4.0 学习总结----数据库访问层结构分析
- String s=new String("abc")共生成几个对象?
- MySQL 中文乱码问题
- Virtual Active:跑步机上环游世界
- 写文章可以得积分吗?
- JavaScript实现系列常用表单验证
- input 文本框输入值的同时弹出层显示条件结果
- 关于在Excel应用中的Exception from HRESULT:0x800A03EC
- iphone开发使用得替换方法及正则表达式替换
- erlang使用ODBC调用存储过程