java字符串字面量是否生成String对象
来源:互联网 发布:软件小站的解压密码 编辑:程序博客网 时间:2024/05/16 19:19
public class StringTest { public static void main(String[] args) { String str1 = "abc"; String str2 = new String("abc"); System.out.println(str1 == str2); }}
分析以上代码,它的执行结果是什么?
false
显然他们分别创建了个String对象,并且str1和str2都获得了各自对象的引用,所以结果是不同的,但是在java 5.0及其以后的版本中,在创建该对象以前时,JVM会在String对象池中去搜索该字符串对象是否是被创建,如果已经创建,则直接返回一个引用,否则先创建对象再返回引用。
public class StringTest { public static void main(String[] args) { String str1 = "abc"; String str2 = new String("abc"); String str3 = "abc"; System.out.println(str1 == str2); System.out.println(str1 == str3); }}
其结果是false true,说明str1和str3指向同一个对象,这个对象就是在对象池中,对象池的存在是为了避免频繁的创建和销毁对象而影响系统性能,那么自定义的类能否也使用对象池呢?如下代码:
import java.util.HashSet;/** * Created by wjz on 2017/3/12. */class Dog { private String name; private int age; private static HashSet<Dog> pool = new HashSet<Dog>(); public Dog(String name, int age) { this.name = name; this.age = age; } public static Dog newInstance(String name, int age) { for (Dog dog : pool) { if (dog.name.equals(name) && dog.age == age) { return dog; } } //如果找不到相同的dog对象,则创建一个dog并加入pool Dog dog = new Dog(name,age); pool.add(dog); return dog; }}public class StringPoolTest { public static void main(String[] args) { //对象池中取 Dog dog1 = Dog.newInstance("lele", 30); Dog dog2 = Dog.newInstance("lele", 30); System.out.println(dog1 == dog2); }}
1 0
- java字符串字面量是否生成String对象
- Java中字符串字面量是否自动生成一个String对象?
- 字符串字面量
- 字符串字面量
- 1. 字符串字面量
- 原始字符串字面量
- 字符串字面量
- javascript对象字面量
- json对象字面量
- JavaScript对象字面量
- JS字面量对象
- js对象字面量
- JavaScript对象字面量
- js对象字面量
- JavaScript对象字面量
- js对象字面量
- JavaScript对象字面量
- 注意区分:JSON字符串和Javascript对象字面量
- 不敢死队问题 (sdut oj)
- CI1.1 实现一个算法,确定一个字符串的所有字符是否全部不同。假使不允许使用额外的数据结构。
- Linux监控JVM常用命令解析
- Python3 urllib.parse
- 城市三级联动 评论:发送信息清空输入框
- java字符串字面量是否生成String对象
- 用xshell安装jdk
- iOS scrollview不能滑动的几个原因及解决方法
- hdu2084数塔
- GDUT1169:Krito的讨伐(树 + 优先队列)
- JAVA四则运算字符串解释器
- 列表标签:无序列表、有序列表、定义列表
- C++中cout位数控制
- C++第三次作业(个人所得税计算器、某月有多少天、计算一个分段函数的值)