asignación a la variable de clase declarada en el método sin objeto instanciado

El ejemplo es una clase de tarjeta con un método swap (). Se instancian dos objetos de la Tarjeta. El método los intercambia declarando una tercera variable de Tarjeta, pero sin instanciar un tercer objeto. La tercera variable se utiliza como soporte temporal para admitir un intercambio. Esperaba que el intercambio no funcionara, porque la variable temp se refiere al primer objeto, luego al primer objeto se le asigna el segundo objeto, y al segundo objeto se le asigna temp, que recoge el cambio en el primer objeto, de acuerdo con mis suposiciones .

public class Tester
{
   public static void main(String[] args)
   {
      Card[] cards = new Card[2];
      cards[0] = new Card('x');
      cards[1] = new Card('y');

      System.out.println( cards[0].getVal() + "\n" + cards[1].getVal() + "\n" );

      Card.swap(cards);

      System.out.println( cards[0].getVal() + "\n" + cards[1].getVal() + "\n" );
   }
}

//Card class --------------------------------------------------------------------
class Card
{   

   private char value;


   public Card(char value)
   { 
      set(value);
   }

   public static void swap(Card[] cards){
      Card temp = cards[0];
      cards[0] = cards[1];
      cards[1] = temp;
   }


   public boolean set(char value)
   {

      this.value = value;
      return true;
   }


   public char getVal()
   {
      return value;
   }
}

Salida:

x
y

y
x

Espero que las tarjetas [0] y las tarjetas [1] hagan referencia a la memoria a la que se referían las tarjetas [1] antes de que la temperatura se asigne a las tarjetas [1]. Espero que se pierda la desreferencia de tarjetas [0].

El resultado real es que las tarjetas [0] se intercambian con tarjetas [1]. (¿Es esta una copia verdadera o un cambio de referencia?) Comprendí que, dado que todas las variables de Java son referencias, la desreferencia temporal se convertiría en tarjetas [1] cuando la desreferencia de las tarjetas [0] se convirtió en tarjetas [1]. Ahora parece que temp tiene su propia memoria, aunque no se le asignó un objeto de montón en una operación "nueva". Leí en otra parte algo que me sugirió que así es como funcionan las variables de método, pero no pude encontrar nada que confirmara que así es como funcionan las variables de método de un tipo definido por el usuario, o cualquier tipo no primitivo.

Respuesta 1
  Card temp = cards[0];
  cards[0] = cards[1];
  cards[1] = temp;

La referencia del objeto 'tarjeta X' (mantenida por la posición 0 de la matriz) se asigna a la variable 'temp'.

Luego, la referencia del objeto 'tarjeta Y' (mantenida por la posición 1 de la matriz) se asigna a la posición 0 de la matriz.

Luego, la referencia del objeto 'tarjeta X' (mantenida por la variable 'temp') se asigna a la posición 1 de la matriz.

Más tarde, cuando desreferencia la referencia que la matriz mantiene en su posición 0, obtiene la 'tarjeta Y' como se esperaba.

Respuesta: 2

Tengo que crear una clase común que configure el controlador web de selenio. Mi clase base de configuración: Setupbase.java public void setUp () lanza Exception {driver = new FirefoxDriver (); baseUrl = "http: // ejemplo ....

Código public HttpRequest (BufferedReader from) {String firstLine = ""; pruebe {firstLine = from.readLine (); } catch (IOException e) {System.out.println ("Error al leer la línea de solicitud:" + e); } ...

Estimados desarrolladores de StackOverFlow Quiero una ayuda de ustedes. Estoy atascado en Apache Lucene para usar en la aplicación Java Swing. El problema es tan complejo que incluso estoy confundido, ¿cómo debo preguntarlo? Por favor, inténtalo ...

He estado recibiendo este error de tiempo de ejecución de Java: excepción en el hilo "principal" java.lang.UnsatisfiedLinkError: no jogl en java.library.path Esto tiene que ver con tener dificultades para cargar el nativo dependiente ...