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

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存储:硬盘等永久存储空间



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值