Puis-je créer une classe instanciée avec l'opérateur =
, comme le fait la classe String
? Ou est-ce une fonctionnalité spécifique à la classe String
en Java?Créer un objet immuable, instancié sans nouveau
Répondre
Parce que Java ne supporte pas opérateur défini par l'utilisateur Surcharger une nouvelle instance ne peut pas être créé avec =
opérateur.
Découvrez Why doesn't Java offer operator overloading? pour plus d'informations
Non, vous ne pouvez pas créer une classe qui est instancié juste avec =
opérateur, car vous ne pouvez pas surcharger un opérateur en Java comme vous pouvez en C++ ou C# (voir Operator overloading in Java).
String
s sont instanciés lorsque vous utilisez "something"
que si elle n'existe pas déjà dans la mémoire, de sorte que vous obtenez une référence au même objet exact String
chaque fois que vous écrivez "something"
.
Par exemple, si vous faites:
String a = "something";
String b = "something";
Puis
a == b; // will be true.
Vous pouvez jeter un oeil à ces questions pour en savoir plus sur la façon dont fonctionnent String
objets:
code String s = "Hello World!"
ne crée pas une nouvelle String
. Il attribue une référence d'un String
existant dans String Pool à s
. Si le String
n'existe pas dans String Pool, un nouvel objet String
est créé dans String Pool, mais pas avec l'opérateur =
seul.
Cela crée de nouvelles String
objecs:
String s1 = new String("Hello World!"); // new Object
String s2 = new String("Hello World!"); // new Object
System.out.println(s1 == s2); // false
Cela peut ou ne peut pas créer un nouvel objet String
dans la chaîne Piscine:
String s1 = "Hello World!";
String s2 = "Hello World!";
System.out.println(s1 == s2); // true
Vous pouvez obtenir assez proche du comportement mentionné ci-dessus à l'utilisation getInstance()
modèle, considérez ceci:
public class Singleton {
private Singleton(){}
private static class SingletonHelper{
private static final instance INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return SingletonHelper.INSTANCE;
}
}
Ensuite, vous pouvez utiliser:
Singleton s = Singleton.getInstance();
Le premier extrait de code ne crée pas nécessairement un nouveau 'String' dans le pool de chaînes (les chaînes créées par' new String (...) 'ne sont pas contenues dans le pool). – Nevay
@Nevay Vous avez bien sûr raison, ma faute, a corrigé ma réponse. –
Non, vous ne pouvez pas. C'est quelque chose qui, comme vous l'avez dit, se trouve à l'intérieur de Java. – sudo
Et les chaînes ne sont * pas * instanciées avec '='.Les constantes de chaîne sont définies avec '" ... "' et cela devient plus compliqué à partir de là. Donc, non, vous ne pouvez pas. Utilisez 'new'. Si vous n'aimez pas 'new', vous pouvez le cacher derrière une méthode statique ou quelque chose comme ça. –
https://stackoverflow.com/questions/2068570/how-to-create-a-string-class-replica – soorapadman