Per quale motivo di progettazione non esiste un operatore sizeof in java? sapendo che è molto utile in C++ e C# e come si può ottenere la dimensione di un certo tipo se necessario?perché non c'è sizeof in java
risposta
Perché il size of primitive types è esplicitamente richiesto dal linguaggio Java. Non c'è differenza tra le implementazioni JVM.
Inoltre, poiché l'assegnazione viene eseguita dall'operatore new
in base all'argomento, non è necessario specificare la quantità di memoria necessaria.
Sarebbe certo conveniente a volte di sapere quanta memoria di un oggetto vi porterà così si potrebbe stimare le cose come requisiti massimi dimensione heap, ma suppongo che i progettisti/piattaforma Java di lingue non hanno pensato che fosse un aspetto critico.
ragazzi, lo stesso per C#. Penso che ci sia un motivo di design –
È la conseguenza di un progetto. – nullpotent
"La gente ha criticato la sua assenza in Java" è la ragione del design per molte cose in C#. – Affe
In c è utile solo perché è necessario allocare manualmente e liberare memoria. Tuttavia, poiché in Java è disponibile la garbage collection automatica, non è necessario.
Fino a un certo punto ... – nullpotent
So che a volte potrebbe essere utile, ma, come ha sottolineato @maerics, probabilmente i progettisti non pensavano fosse necessario aggiungerlo alle specifiche del linguaggio. Esistono ancora modi per conoscere le dimensioni di un oggetto, quindi controllare uno dei commenti della domanda. – rabusmar
In Java, non si lavora direttamente con la memoria, quindi di solito non è necessario sizeof
, se si desidera determinare la dimensione di un oggetto, controllare this question.
La gestione della memoria è fatto dal VM in Java, forse questo potrebbe aiutare: http://www.javamex.com/java_equivalents/memory_management.shtml
C necessaria sizeof perché la dimensione di int e long varia a seconda del sistema operativo e compilatore. O almeno lo era. :-) In Java tutte le dimensioni, le configurazioni di bit (ad es. IEEE 754) sono meglio definite.
EDIT - Vedo che @Maerics ha fornito un collegamento alle specifiche Java nella sua risposta.
- 1. perché sizeof ("- 2147483648") - 1
- 2. Perché sizeof (int) è diverso da sizeof (int *)?
- 3. perché sizeof ('a') è 4 in C?
- 4. Perché -1> sizeof (int)?
- 5. sizeof non mostra l'output previsto
- 6. operatore sizeof() in C
- 7. Perché la sizeof è considerata un operatore?
- 8. Perché sizeof (char + char) restituisce 4?
- 9. Sizeof struct in Go
- 10. Perché è più sicuro da usare sizeof (* puntatore) in malloc
- 11. Semplice printf con sizeof non funziona affatto
- 12. comportamento dell'operatore sizeof in C
- 13. Swift: come usare sizeof?
- 14. sizeof() mostra output diverso
- 15. C# perché sizeof non è sicuro e come ottenere dimensioni di una struttura in modo sicuro?
- 16. sizeof comportarsi in modo imprevisto
- 17. Get sizeof (type) in Windbg
- 18. C++ sizeof with bool
- 19. perché non è (123 == 0123) in java?
- 20. Perché non c'è ceil (float) in Java?
- 21. stringa Sizeof letterale
- 22. Perché offsetof (membro) è uguale a sizeof (struct)?
- 23. Perché sizeof (std :: string) ha solo otto byte?
- 24. sizeof (long) in C++ a 64 bit
- 25. confusione circa operatore sizeof in C
- 26. Perché Java enumerazioni non clonabile?
- 27. Ho la garanzia che sizeof (type) == sizeof (tipo senza segno)?
- 28. C# sizeof decimal?
- 29. Perché sizeof (std :: mutex) == 40 (gcc, clang, icc)?
- 30. Perché sizeof (param_array) è la dimensione del puntatore?
possibile duplicato di [In Java, qual è il modo migliore per determinare la dimensione di un oggetto?] (Http://stackoverflow.com/questions/52353/in-java-what-is-the-best-way -per-determinare-la-dimensione-di-un-oggetto) –
http://stackoverflow.com/questions/4115239/sizeof-java-object – birryree
le collezioni well hanno il metodo .size() e gli array e string hanno .length (). hai bisogno di byte in particolare? – aishwarya