new - string options java
Crear objeto inmutable, instanciado sin nuevo (3)
Esta pregunta ya tiene una respuesta aquí:
- Sobrecarga del operador en Java 9 respuestas
¿Puedo crear una clase que se ejecute solo con el operador =
, como lo hace la clase String
? ¿O es una característica específica de String
clase String
en Java?
Debido a que Java no admite la sobrecarga del operador definido por el usuario, no se puede crear una nueva instancia con =
Operator.
Echa un vistazo ¿Por qué Java no ofrece sobrecarga de operadores? para más información
String s = "Hello World!"
código String s = "Hello World!"
no crea una nueva String
. Asigna una referencia de una String
existente en el grupo de cadenas a s
. Si la String
no existe en el grupo de cadenas, entonces se crea un nuevo objeto de cadena en el grupo de cadenas, pero no con el operador =
solo.
Esto crea nuevos objetos de String
:
String s1 = new String("Hello World!"); // new Object
String s2 = new String("Hello World!"); // new Object
System.out.println(s1 == s2); // false
Esto puede o no crear un nuevo objeto String en String Pool:
String s1 = "Hello World!";
String s2 = "Hello World!";
System.out.println(s1 == s2); // true
Podría acercarse bastante al comportamiento mencionado anteriormente con el uso del patrón getInstance()
, considere esto:
public class Singleton {
private Singleton(){}
private static class SingletonHelper{
private static final instance INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return SingletonHelper.INSTANCE;
}
}
Entonces podrías usar:
Singleton s = Singleton.getInstance();
No, no puede crear una clase que se ejecute solo con el operador =
porque no puede sobrecargar un operador en Java como puede hacerlo en C ++ o C # (consulte Sobrecarga del operador en Java ).
String
se crean una instancia cuando se usa "something"
solo si no existe en la memoria, por lo que se obtiene una referencia al mismo objeto de String
exacto cada vez que se escribe "something"
.
Por ejemplo, si lo hace:
String a = "something";
String b = "something";
Entonces
a == b; // will be true.
Puede consultar estas preguntas para obtener más información sobre cómo funcionan los objetos String
: