Czy mogę utworzyć klasę, która tworzy instancje za pomocą tylko operatora =
, na przykład klasy String
? Czy jest to funkcja specyficzna dla klasy String
w Javie?Utwórz niezmienny obiekt, utworzony bez nowego
Odpowiedz
Ponieważ Java nie obsługuje zdefiniowany przez użytkownika Operator Przeciążenie nowa instancja nie może być utworzony z =
Operatora.
Wyjazd Why doesn't Java offer operator overloading? więcej informacji
Nie, nie można utworzyć klasę, która jest instancję tylko z =
operatora bo nie można przeciążać operatora w Javie jak można w C++ lub C# (patrz Operator overloading in Java).
String
s są wystąpienia podczas korzystania "something"
tylko wtedy, gdy nie istnieje w pamięci, więc można uzyskać odniesienie do tego samego obiektu dokładny String
każdym razem piszesz "something"
.
Na przykład, jeśli zrobić:
String a = "something";
String b = "something";
Następnie
a == b; // will be true.
Można spojrzeć na te pytania, aby dowiedzieć się więcej o tym, jak String
obiekty działa:
Kod String s = "Hello World!"
nie tworzy nowego String
. Przypisuje on odniesienie do String
istniejącego w Puli Ciągów do s
. Jeśli String
nie istnieje w Puli ciągów, to nowy obiekt String
jest tworzony w Puli Ciągów, ale nie z samym operatorem =
.
Stwarza to nowe String
objecs:
String s1 = new String("Hello World!"); // new Object
String s2 = new String("Hello World!"); // new Object
System.out.println(s1 == s2); // false
To może lub nie może utworzyć nową String
obiekt w łańcuchach Basen:
String s1 = "Hello World!";
String s2 = "Hello World!";
System.out.println(s1 == s2); // true
można dostać dość blisko do zachowania wspomnianej powyżej z wykorzystaniem getInstance()
wzór, należy wziąć pod uwagę to:
public class Singleton {
private Singleton(){}
private static class SingletonHelper{
private static final instance INSTANCE = new Singleton();
}
public static Singleton getInstance() {
return SingletonHelper.INSTANCE;
}
}
Następnie można użyć:
Singleton s = Singleton.getInstance();
Pierwszy fragment kodu niekoniecznie tworzy nowy ciąg 'String' w puli ciągów znaków (łańcuchy utworzone przez' new String (...) 'nie są zawarte w puli). – Nevay
@Nevay Masz oczywiście rację, moja wina, poprawiłem moją odpowiedź. –
- 1. Jak zaktualizować obiekt użytkownika bez tworzenia nowego?
- 2. Utwórz obiekt COM z pliku bez regsvr32
- 3. życie nowego obiektu bez odnoszenia
- 4. Czy obiekt datetime.date bez dnia może zostać utworzony w pythonie?
- 5. Jak sprawdzić, czy obiekt jest niezmienny?
- 6. Utwórz obiekt w szablonie prędkości
- 7. utwórz dokument javascript Obiekt
- 8. Utwórz obiekt z właściwościami,
- 9. Utworzony obiekt observableArray jest zawsze pusty
- 10. Dlaczego obiekt ten nie zostanie utworzony? C++
- 11. ASP.NET MVC odczytuje właściwości, gdy obiekt utworzony
- 12. Utwórz obiekt JSON we właściwy sposób
- 13. Hashable, niezmienny
- 14. Jak mogę skopiować niezmienny obiekt taki jak tuple w Pythonie?
- 15. Utwórz obiekt na podstawie 2 innych
- 16. Utwórz klasę PHP -> Utwórz obiekt w innej klasie
- 17. Niezmienny vs Mutable C#
- 18. Utwórz nowy obiekt PropertyInfo w locie
- 19. Utwórz kontekst 2d * bez * canvas
- 20. Jak wstrzyknąć zależności w obiekt utworzony automatycznie na wiosnę?
- 21. Sprawdź, czy obiekt został utworzony czy nie w delphi
- 22. Delphi: Jak uwolnić obiekt utworzony dynamicznie jako parametr metody
- 23. JpaRepository buforuje nowo utworzony obiekt. Jak to odświeżyć?
- 24. spłaszczania hierarchii obiekt utworzony z d3.js gniazdowania
- 25. Utwórz losowo spadający obiekt w Jquery
- 26. Utwórz obiekt daty ISO w javascript
- 27. Utwórz obiekt z dynamicznych nazw właściwości
- 28. utwórz obiekt json ze stringów z rubinem
- 29. Utwórz obiekt, znając tylko nazwę klasy?
- 30. Utwórz obiekt z klasy w oddzielnym pliku
Nie, nie można. Jest to coś, co, jak powiedziałeś, "leży wewnątrz Javy". – sudo
I łańcuchy są * nie * tworzone z '='.Stałe łańcuchowe są definiowane za pomocą '" ... "', a stamtąd staje się bardziej skomplikowane. Więc nie, nie możesz. Użyj 'new'. Jeśli nie podoba ci się 'new', możesz ukryć to za statyczną metodą fabularną lub coś podobnego. –
https://stackoverflow.com/questions/2068570/how-to-create-a-string-class-replica – soorapadman