Java经典基础案例分析:引用与赋值问题详解
程序员文章站
2024-01-01 17:07:34
...
今天遇到了一个以前做过的一个经典的java数据引用与赋值关系的题目,来给大家分享一下笔记:
(关于java引用与赋值的详解:来,直接上代码上图:)
package ide;
/**
* @author fntp QQ358566760 鑫软java学习笔记
*/
public class SwapChange {
public static void main(String[] args) {
// 首先测试一下test01,int数据类型能不能swap()方法赋值?
System.out.println("======================================");
test01();
System.out.println("======================================");
// 再来测试一下test02,String类型能不能swap()方法赋值?
test02();
System.out.println("======================================");
// 最后试试数组的形式:采用引用数据类型能不能swap()方法赋值?
test03();
System.out.println("======================================");
}
public static void Swap_int(int x,int y) {
int temp = x;
x = y;
y = temp;
}
public static void Swap_String(String x,String y) {
String temp = x;
x = y;
y = temp;
}
public static void Swap_Arrays(int a[]) {
int temp = a[0];
a[0] = a[1];
a[1] = temp;
}
public static void test01() {
// TODO Auto-generated method stub
int a = 1;
int b = 2;
System.out.println("目前缓存数据是:"+"a="+a+"b="+b);
Swap_int(a, b);
System.out.println("swap()方法转换后,缓存数据是:"+"a="+a+"b="+b);
}
public static void test02() {
// TODO Auto-generated method stub
String a = new String("scx");
String b = new String("gd");
System.out.println("目前缓存数据是:"+"a="+a+"b="+b);
Swap_String(a, b);
System.out.println("swap()方法转换后,缓存数据是:"+"a="+a+"b="+b);
}
// 使用数组进行转换赋值
public static void test03() {
// TODO Auto-generated method stub
int Array01[] = new int []{666,999};
System.out.println("目前缓存数据是:"+"第一个数据:"+Array01[0]+"第二个数据:"+Array01[1]);
Swap_Arrays(Array01);
System.out.println("swap()方法转换后,缓存数据是:"+"第一个数据:"+Array01[0]+"第二个数据:"+Array01[1]);
}
}
调试以后,可以很直观看出,是因为数据类型而导致swap()方法无法对数据进行赋值操作,因而即:
只有引用类型才可以交换。因为创建声明对象的时候,比如int,char,string等基本数据类型声明对象的数据类型的时候,是直接赋值。而引用类型直接赋的是地址,地址指向的是同一个对象,所以能改变。
总结:引用是用一块内存指向另一块内存!一般引用中的内容是一个内存地址!而赋值是把自己内存中的内容拷贝到指定的内存中!其中可以是内存地址也可以是数据。传值的过程只是将实参的值复制给形参,它们实参与形参并不是共享一段相同的内存,因此形参的改变只是改变自己占用的内存的值,而不改变实参。只有通过指针和引用才可以真正实现对实参内容的改变,因为此时实参与形参共享同一地址单元,形参改变值了,实参自然也要改。
===============================================================
即:java基本数据类型传值,方法不会改变实参的值。