JAVA入门题~在线等

来源:百度知道 编辑:UC知道 时间:2024/06/15 20:48:21
下面的程序为什么,不能降序排列??????????
import java.util.*;
class Blocking
{
public void changeVariable(int a, int b)
{
int temp = a;
a = b;
b = temp;

}
}
public class TestBlocking{
public static void main(String[] args)
{
Blocking blockingExample = new Blocking();
int number1 = 45;
int number2 = 24;
int number3 = 85;
if(number1 > number2)
{
blockingExample.changeVariable(number1 , number2);
}
else if(number1 > number3)
{
blockingExample.changeVariable(number1 , number3);
}
else if(number2 > number3)
{
blockingExample.changeVariable(number2 , number3);
}
System.out.printf("这3个数的从小到大的顺序是%d < %d < %d",number1,number2,number3);

}
}

【问题分析】
1、基本类型是数值的拷贝,而引用类型传递的是引用的拷贝。
2、基本类型是只在栈内存中操作,也就是说将main()方法中的三个整型的值保存到栈内存中,执行方法changeVariable交换时,栈内存为这个方法又分配了两个地址空间,然后再这两个地址空间内互换,而不影响到为main()方法中的三个整型数值分配的空间,所以互换操作是在另外的栈内存中进行的,所以影响不到main()方法中互换,所以你在打印的时候没有效果,但引用类型不同。引用类型用到了堆内存,在堆内存上操作,所以一个变全都变,这是不同的地方。
【正确代码】
根据楼主的代码更正:
import java.util.*;
class Blocking
{
public void changeVariable(int[] num)
{
for(int i=0;i<num.length;i++)
{
for(int j=1;j<=num.length-1-i;j++)
{
if(num[j-1]>num[j])
{
num[j-1] = num[j-1]+num[j];
num[j] = num[j-1]-num[j];
num[j-1] = num[j-1]-num[j];
}
}
}

}
}
public class TestBlocking{
public static void main(String[] args)
{
Blocking blockingExample = new Blocking();
int[] num = new int[]{45,24,12};
blockingExample.changeVariable(num);

System.out.printf("这3个数的从小到大的顺序是%d < %d < %d",num[0],num[1],n