是否有可能写入交换方法在Java中? [重复](Is it possible to write

2019-06-21 08:33发布

这个问题已经在这里有一个答案:

  • 如何用Java编写[复制]一个基本的交换功能 19个回答
  • Java方法换元 7个回答

这里的问题是:写交换两个变量的方法。 这两个变量应该是原语。 它并不需要是通用例如两个int变量。 有没有办法?

Answer 1:

不使用阵列或对象,没有,它是不可能的,方法中做到这一点。



Answer 2:

虽然这是不可能写出简单地交换两个变量的函数,可以写一个辅助函数 ,使您可以:

  • 使用一个语句交换两个变量
  • 如果没有在调用者的代码临时变量
  • 如果没有“拳击”的原语
  • 通过几次重载(其中一人使用泛型), 它适用于任何类型的

这就是你怎么可以这样做:

int returnFirst(int x, int y) {
    return x;
}
int a = 8, b = 3;
a = returnFirst(b, b = a); // try reading this as a = b; b = a;
System.out.println("a: " + a + ", b: " + b); // prints a: 3, b: 8

这工作,因为Java语言担保(Java语言规范,Java SE 7中版第15.12.4.2),从左至右(其它语言不同,在评估的顺序是不确定的)所有参数进行评估,这样的执行顺序是:

  1. 的原始值b ,以便评价作为第一个参数的函数被传递
  2. 表达式b = a被评估,并且结果(新值b )作为第二个参数的函数传递
  3. 该函数执行,返回的原始值b和忽略了它新的价值
  4. 你把结果赋给a

如果returnFirst太长,你可以选择一个较短的名称,使代码更紧凑(例如a = sw(b, b = a) 用这个来打动你的朋友和迷惑敌人:-)



Answer 3:

看看这篇文章JavaWorld的解释得很详细:

http://www.javaworld.com/javaworld/javaqa/2000-05/03-qa-0526-pass.html

两个基本的交换行不通,因为原语是按值在Java中通过。 你甚至不能写交换两个对象为此事的方法。

就像@Thomas说,你唯一可以做的一件事就是包含其它物品/阵列中的原语和修改这些。



Answer 4:

一班轮任何原始的数字:

a += (b - (b = a));


Answer 5:

你可以使交换任何数量的相同类型的对象@马库斯的交换方法的通用版本:

<T> T swap(T... args) {   // usage: z = swap(a, a=b, b=c, ... y=z);
    return args[0];
}

b = swap(a, a=b);
z = swap(x, x=y, y=z);


Answer 6:

在Java5的,我能想到的,它可以帮助你最接近的,就是:

该的AtomicInteger类(和其他人)有getAndSet()原子的方法..



Answer 7:

要编写交换你得有“OUT”的变量,即变量,其值被向上传递给调用上下文的概念原语的交换方法。 C#有这些,但你仍必须指定,他们是出来的变量。



Answer 8:

这个功能将交换两个整数

Integer[] swap(int a, int b){
    return new Integer[]{b,a};
}


Answer 9:

下面是一个交换两个原始变量的方法

private void swap(){
    int a = 1;
    int b = 2;
    int temp = a;
    a = b;
    b = temp;
}

它可能没有多大用处的,虽然;)

好严重的是,它可如果变量类级别进行:

public class MyClass{
    // excuse horrible coding practice of public mutable fields
    public int a = 1;
    public int b = 2;

    public void swap(){
        int temp = a;
        a = b;
        b = temp;
    }
}

再次,虽然,我无法看到使用的,这可能是什么



Answer 10:

我已阅读上述回答寻求解释为什么它是说,一个交换程序不能写在它是用C的方式使用Java ++。 我做了以下的方法程序截图



Answer 11:

正如托马斯·欧文斯说。 你也许可以通过与基准传递变量做,在C,但据我所知不是在没有使用对象的Java。



Answer 12:

是有可能使用一种方法来交换两个变量。 但是,你应该声明,法空括号,然后通过引用(空括号)调用它 。 下面是示出了使用方法的两个可变的交换的例子。

公共类交换实现

{

static String A="Apple";
static String B="Bat";

    public static  void swap()
    {
       String k;
        k=A;
        A=B;
        B=k;

    }

  public static void main(String[] args) 
  {
    System.out.println("Before swapping");
    System.out.println("A= "+A);
    System.out.println("B= "+B);
    swap();
    System.out.println("After swapping");
    System.out.println("A= "+A);
    System.out.println("B= "+B);
  }

}

通过编译上述代码的输出来如下:

之前交换

A =苹果

B =蝙蝠

交换后

A =蝙蝠

B =苹果

//在通过引用原始值呼叫的情况下,如果我们作出所调用的方法的变化改变



Answer 13:

public class Swap
{
    public static void main (String[]args)
    {
        int y = 5;
        int x = 4;
        int c;

        System.out.println("y = "+y);
        System.out.println("x = "+x);

        c=x; //c = 4
        x=y; //x = 5;
        y=c;

        System.out.println("\n");
        System.out.println("y= "+y);
        System.out.println("x= "+x);
    }    
}


文章来源: Is it possible to write swap method in Java? [duplicate]