可以在 java 中使用包装器 class 交换两个数字而不创建任何其他 class 吗?
Can two numbers be swapped using wrapper class in java without creating any other class?
这是我使用包装器 class 交换两个数字的代码,我知道 java 只能按值传递,所以我们不能使用像指针这样的东西来传递variables.For 的地址 这是我为包装器 class Integer a,b.
创建的对象
但是这段代码不起作用,代码部分的注释解释了我的方法,谁能告诉我我哪里错了。
class swp{
public static void main(String[] args) {
Integer x = new Integer(5); //x --> obj with 5 int value
Integer y = new Integer (6); //y --> obj with 6 int value
System.out.println("x = "+ x+ " " +"y = " + y);
swap(x,y);
System.out.println("x = " + x+ " " +"y = " + y);
}
//the values in x and y are copied in a and b
static void swap(Integer a,Integer b){ //a ,x--> obj with 5 int value .b,y --> obj with 6 int value
int temp = a.intValue(); // temp contains 5
a = b.intValue() ; // value at the obj ref. by a has changed to 6
b = temp; //value at the obj ref. by a has changed to 5
System.out.println("in func : "+"a = " + a+ " " +"b = " + b);
}
}
输出
a = 5 b = 6
in func : a = 6 b = 5
a = 5 b = 6
我知道我可以使用以下方法做到这一点
void swap(class_name obj1,class_name obj2){
int temp = obj1.x;
obj1.x =obj2.x;
obj2.x = temp;
}
但我想知道我的方法究竟有什么问题。
不直接使用 Integer
,但您 可以 使用 Integer
(或 int
)数组。喜欢,
public static void main(String[] args) {
int[] arr = { 5, 6 };
System.out.println("a = " + arr[0] + " " + "b = " + arr[1]);
swap(arr);
System.out.println("a = " + arr[0] + " " + "b = " + arr[1]);
}
private static void swap(int[] arr) {
int t = arr[0];
arr[0] = arr[1];
arr[1] = t;
}
哪个输出
a = 5 b = 6
a = 6 b = 5
或 创建一个 POJO,
class MyPair {
private int a;
private int b;
public MyPair(int a, int b) {
this.a = a;
this.b = b;
}
public String toString() {
return String.format("a = %d, b = %d", a, b);
}
public void swap() {
int t = a;
a = b;
b = t;
}
}
那你可以做
public static void main(String[] args) {
MyPair p = new MyPair(5, 6);
System.out.println(p);
p.swap();
System.out.println(p);
}
同样的结果。
这是我使用包装器 class 交换两个数字的代码,我知道 java 只能按值传递,所以我们不能使用像指针这样的东西来传递variables.For 的地址 这是我为包装器 class Integer a,b.
创建的对象
但是这段代码不起作用,代码部分的注释解释了我的方法,谁能告诉我我哪里错了。
class swp{
public static void main(String[] args) {
Integer x = new Integer(5); //x --> obj with 5 int value
Integer y = new Integer (6); //y --> obj with 6 int value
System.out.println("x = "+ x+ " " +"y = " + y);
swap(x,y);
System.out.println("x = " + x+ " " +"y = " + y);
}
//the values in x and y are copied in a and b
static void swap(Integer a,Integer b){ //a ,x--> obj with 5 int value .b,y --> obj with 6 int value
int temp = a.intValue(); // temp contains 5
a = b.intValue() ; // value at the obj ref. by a has changed to 6
b = temp; //value at the obj ref. by a has changed to 5
System.out.println("in func : "+"a = " + a+ " " +"b = " + b);
}
}
输出
a = 5 b = 6
in func : a = 6 b = 5
a = 5 b = 6
我知道我可以使用以下方法做到这一点
void swap(class_name obj1,class_name obj2){
int temp = obj1.x;
obj1.x =obj2.x;
obj2.x = temp;
}
但我想知道我的方法究竟有什么问题。
不直接使用 Integer
,但您 可以 使用 Integer
(或 int
)数组。喜欢,
public static void main(String[] args) {
int[] arr = { 5, 6 };
System.out.println("a = " + arr[0] + " " + "b = " + arr[1]);
swap(arr);
System.out.println("a = " + arr[0] + " " + "b = " + arr[1]);
}
private static void swap(int[] arr) {
int t = arr[0];
arr[0] = arr[1];
arr[1] = t;
}
哪个输出
a = 5 b = 6
a = 6 b = 5
或 创建一个 POJO,
class MyPair {
private int a;
private int b;
public MyPair(int a, int b) {
this.a = a;
this.b = b;
}
public String toString() {
return String.format("a = %d, b = %d", a, b);
}
public void swap() {
int t = a;
a = b;
b = t;
}
}
那你可以做
public static void main(String[] args) {
MyPair p = new MyPair(5, 6);
System.out.println(p);
p.swap();
System.out.println(p);
}
同样的结果。