请问这个程序应该怎么改变 才可以实现两个数字的转换呢?public class Test {
public static void main(String[] args) {
int num1 = 2;
int num2 = 4;
System.out.println(
"Before invoking the swap method , num1 is" +
num1 + " " + "num2 is " + num2 );
swap ( num1 , num2);
System.out.print( "After invoking the swap method , num1 is" +
num1 + "num2 is " + num2);
} public static void swap ( int num1 , int num2){
int a;
a = num1;
num1 = num2;
num2 = a;
}
}
public static void main(String[] args) {
int num1 = 2;
int num2 = 4;
System.out.println(
"Before invoking the swap method , num1 is" +
num1 + " " + "num2 is " + num2 );
swap ( num1 , num2);
System.out.print( "After invoking the swap method , num1 is" +
num1 + "num2 is " + num2);
} public static void swap ( int num1 , int num2){
int a;
a = num1;
num1 = num2;
num2 = a;
}
}
int temp;
temp = a;
a = b;
b = temp;
class Change{
public void change(String str,char ch[],int i){
str="test ok";
ch[0]='g';
i++;
}
}public class Test8 {
public static void main(String args[]){
String str="good";
char ch[]={'a','b','c'};
int i=3;
Change cha=new Change();
cha.change(str,ch,i);
System.out.println(str);
System.out.println(ch);
System.out.println(i);
}
}
结果为:
good
gbc
3
可见数组和其它类型不一样,传的是地址,结果改变这里需要解释一下,java基本类型(byte、int、char、long、float、double、boolean和short)是传值,也就是传的是副本,而其余传的是引用(所谓引用传递就是把对象的引用地址传进函数,而不是像值传递那样产生一个副本),对于字符串对象来说,虽然在参数传递的时候也是引用传递,但是java虚拟机在函数内部对字符串对象进行了特殊处理--视String对象为常量(final) 所以对传进来的引用地址所引用的string对象比能直接进行修改,而是产生一个副本对其进行操作,对其进行的操作不会影响原来的值。这就是为什么字符串和数组都是引用传递,字符串没变而数组变了的原因String传的是值,改变的是局部变量的值,对其他范围没有影响。
Char[] 传的是地址,改变值就等于改变了内存中原先的数组的值。
故答案为: good and gbc
public class Test{
public static void main(String[] args) {
int num1 = 2;
int num2 = 4;
System.out.println(
"Before invoking the swap method , num1 is" +
num1 + " " + "num2 is " + num2 );
//swap ( num1 , num2);
int a;
a = num1;
num1 = num2;
num2 = a;
System.out.print( "After invoking the swap method , num1 is" +
num1 + " num2 is " + num2);
}/*public static void swap ( int num1 , int num2){
int a;
a = num1;
num1 = num2;
num2 = a;
}*/
}
public static void main(String args[]){
int a = 2;
int b = 3;
a = a + b;
b = a - b;
a = a - b;
System.out.println(a);
System.out.println(b);
}
}
//要说明的是,这里没引用第三个变量,而直接是两个变量之间的交换。
其次是明白什么是面向对象编程;Java是什么样的语言;public class Swap<T> { T firstField;
T secondField;
public Swap(T firstField, T secondField){
this.firstField = firstField;
this.secondField = secondField;
}
public void swap(Swap<T> swapObj){
if(swapObj == null) return;
T temp = swapObj.firstField;
swapObj.firstField = swapObj.secondField;
swapObj.secondField = temp;
} @Override
public String toString() {
return "Swap [firstField=" + firstField + ", secondField="
+ secondField + "]";
}
}Swap<Integer> obj = new Swap<Integer>(2, 4);
System.out.println(obj);
obj.swap(obj);
System.out.println(obj);
public class Test { public static void main(String[] args) {
int num1 = 2;
int num2 = 4;
int a;
System.out.println("Before invoking the swap method , num1 is" +" "+ num1 + ", " + "num2 is "+" "+ + num2 );
// swap(num1,num2);
a=num1;
num1 = num2;
num2=a;
System.out.print( "After invoking the swap method , num1 is"+" " +num1+ ", " + "num2 is " +" "+ num2);
}
//static void swap(int num1,int num2){
// int a;
// a=num1;
// num1=num2;
// num2=a;
// System.out.println(num1+", "+num2);
//
// }