您的位置:首页 > 编程语言 > Java开发

Java中String="hello"和new String("hello')两种创建字符串的区别

2017-01-10 13:58 411 查看
1.创建String类的对象的两种方式:

1. ""直接赋值法

2. new关键字法

2.两种创建字符串的地址比较






String str="hello";

String str1="hello";

String str2=new String("hello");

String str3=new String("hello");

此时在创建str的时候会去检查常量池里面是否有"hello"这个字符串,如果有的话则不创建,直接地址指向,所以此时str==str1为true,str.equals(str1)为true;

用String str="";这种方式创建的字符串都是在常量池中存在。

用new String("")来创建的字符串都是在堆中开辟空间。

注:常量池:常量池(constant pool)指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。它包括了关于类、方法、接口等中的常量,也包括字符串常量。

1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制.

2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中。)

3. 堆:存放所有new出来的对象。

4. 静态域:存放静态成员(static定义的)

5. 常量池:存放字符串常量和基本类型常量(public static final)。

6. 非RAM存储:硬盘等永久存储空间
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: