引入
今天在看String与StringBuffer的区别的时候,关于它们传参的时候,String在当参数的时候会当基本数据类型使用,值不会改变。详情参考:https://editor.csdn.net/md/?articleId=105599755
怎么理解String类型的值不会变
- 形参随着方法的销毁也消失了
public class Test {
public static void main(String[] args) {
int a = 234;
change(3);
System.out.println(a);
}
public static int change(int a){
a = a + 2;
return a;
}
}
结果:
234
int 类型
String比较特殊,讲一讲
- String创建字符串有两种方式
- String a = “abc”,“abc” 存放在常量池中
- String a = new String(); new了一个对象,值放在堆中
- String被当作形参时,会被当做基本数据类型使用,方法销毁时,形参也没有了
引入2
看到上面的 int a = 98、 String a = “abc” 、 Integer a = 2; 又想到他们存储在哪?
- 声明变量为基本数据类型时,变量名和变量值存放在栈中
- 声明变量为引用数据类型时,栈中存的只是一个引用地址,指向堆(有特殊情况)
- 上面我们讲到的 String a = “abc”, 他并没有创建对象(String是个不可变类,是个表较特殊的类)
- 对JVM为了节省空间, 当Integer的值落在-128~127之间时,不会自动装箱,创建对象