String a="123";String b=a;一共创建了多少个对象?
解决方案 »
- mail.jar源码官方下载地址
- 谁知道如何能够实例化一个泛型list
- java 接口继承接口
- Spring 如何互相注入,或如何互相引用
- 关于Bpel的问题
- 求工作流引擎设计方案
- Java操作ORACLE数据库Clob字段,我插入一个34k的文本的时候报错 java.sql.SQLException ora-21560:argument is null,invalid,or ou
- javamail的群发问题
- 初学,简单的helloworld例程出现错误!
- j2ee1.3的例子在J2EE1.4中使用的问题。
- Hibernate的get方法问题
- JPA出错,SQL Error: 0, SQLState: S1009 DAY_OF_MONTH
String 类是不可改变的,它的值是在常量池中的。所以你一旦创建了 String 对象,那它的值就无法改变了。
public static void main(String[] args) {
String a = "123";
String b = a;
String c = "1";
}
}看图说话
老实讲我也是小白,在这给提供一个思路而已
https://mp.csdn.net/postedit/86007922
https://mp.csdn.net/postedit/86007922
String a="123" 在类被加载时候创建,然后String b=a 只是将b的引用指向了和a同一个对象身上而已,这个过程并没有任何对象创建。
在栈上创建了一个引用型变量a,在常量池中创建来一个字符常量“123”,并将“123”的地址复制给引用型变量a。
String b=a;
在栈上创建了一个引用型变量b,并将a的值赋给b,既b也指向了字符常量“123”。
总结,总共在栈上创建了两个引用型变量a和b。在常量池中创建了一个字符常量。
其实严格来说,这个字符常量并不是代码执行到这里才创建,而是加载这个类的时候就创建的。
private final char value[];
private int hash;
private static final long serialVersionUID = -6849794470754667710L;serialVersionUID 如果不算的话, 就很清楚了.