这篇博文是对知乎上的一个朋友的回答重新做了排版,传送门
基本类型和引用类型
- 区别:
int num = 10;
String str = "hello";
- 如上图所示,int是基本数据类型,其值是直接保存在变量当中。而String是引用类型,变量str中保存的是对象地址。因此,str一般称为引用变量,引用指向实际对象,而实际对象中保存着值。
赋值运算符(=)的含义
- code:
num = 20;
str = "java"
- 对于基本数据类型int,赋值运算符会直接修改其值,原来的值会被覆盖掉。而对于引用类型String,赋值运算符会改变引用中所保存的地址,原来的地址会被覆盖掉。但是原来的对象不会被改变。任然存在。
基本类型和引用类型作为函数参数
- 第一个例子:number是基本数据类型,number将保存的值传递给value,value在数值上和number相等,但是value的变化不会影响number,两个变量除了数值相等没有任何联系:
void foo(int value)
{
value = 100;
}
foo(number);
- 第二个例子:没有提供改变改变自身值的引用类型,str不会被改变,因为text=“windows”修改的是引用变量text中的值(地址),其修改的并不是值(地址)所指向的值。因此引用变量str所指向的内存中的值并没有变化。
void foo(String next)
{
text = "windows";
}
foo(str);
- 第三个例子:提供了改变自身方法的引用类型,StringBuilder对象的append()方法修改的是对象本身,因此变量str的值也发生了改变。
StringBuilder str = new StringBuilder("iphone");
void foo(StringBuilder builder)
{
builder.append("7");
}
foo(str);
- 第四个例子:提供了改变自身方法的引用类型,但是不使用,而是使用赋值运算符。
StringBuilder str = new StringBuilder("iphone");
void foo(StringBuilder builder)
{
builder = new StringBuilder("ipad");
}
foo(str);
注意
- 在java编程中应当修改变量时应当注意修改的是变量的值还是对象中的值