Java中String直接赋值和使用new的区别
参考了博主世事如书的文章戳这里
自己也总结总结:
- Java中一切皆是对象。只要是用类定义的变量,不管是直接赋值(如 String a = “hello”;)还是new一个对象(如 String a = new String(“hello”);),Java都会为它们创建对象。区别是前者是在常量池中创建对象的(从JDK1.7版本之后,java String池设置在堆中,即从堆内存中分离出的一块内存),后者由于用了new关键字,首先会在对内存中创建一个对象,然后会在String池里面再创建一个对象(前提是String池中没有这个字符串)。当然创建对象之后都会让变量指向对象。
- 关于Java中的基本类型:基本类型的值是存放再栈中的。在《疯狂java讲义》中的自动装箱和自动拆箱部分,说到“Java中设置基本类型是为了照顾程序员的习惯,能用包装类就用包装类,程序会更加健壮”。
- 也就是说Java基本类型变量是不会创建对象的。当然在栈中的读写速度快很多,创建和销毁速度也很非常快。但现在硬件发展已超出软件的很大一部分了,很多时候完全不用考虑这部分成本,所以能用(包装)类就用(包装)类。