È possibile trovare il codice sorgente completo dei metodi nativi here
Spero che questo lavoro per voi.
Questi sono metodi nativi, perché devono interagire con la macchina. Qui il codice dipendente dalla macchina è scritto nel linguaggio C, che non viene fornito con il pacchetto sorgente o nello rt.jar
della posizione lib
dello Java Runtime Environment (JRE).
Un motivo in più per essere nativi è probabilmente per motivi di prestazioni. A causa della programmazione a livello C, le prestazioni possono essere migliorate, quindi potrebbero aver scritto il codice nativo nel linguaggio C.
I metodi sono nativi perché riguardano dati nativi. Il metodo hashCode
restituisce un valore intero che dipende dalla rappresentazione interna di un puntatore a un oggetto sull'heap. Il metodo getClass
deve accedere allo vtbl
interno (virtual function table) che rappresenta la gerarchia di classi del programma compilato. Nessuno di questi è possibile con il core Java.
fonte
2012-05-14 09:07:28
non è un duplicato - l'OP sa che cosa è nativo, ma vuole sapere _ perché sono specificatamente questi due metodi. – Alnitak
hashCode() è nativo perché il modo in cui i dati vengono archiviati può differire in sistemi operativi diversi. Non sono sicuro del perché getClass() sia; probabilmente a causa di diverse implementazioni del polimorfismo. – Vulcan
@Vulcan getClass() è definitivo quindi non è possibile sovrascriverlo e interrompere il sistema di tipi. – EJP