Looks come variabili doppie di tipo non hanno metodi. Qualcosa di sbagliato con Java o NetBeans?
-
14-10-2019 - |
Domanda
Secondo Oracle dovrei essere in grado di applicare metodi come .intValue()
e .compareTo()
a doppie ma quando scrivo dbl.toString()
in NetBeans, ad esempio, l'IDE mi dice che doppie non possono essere dereferenziati. Non riesco nemmeno a gettarli in interi in forma (Integer) dbl
!
Ho JDK 1.6 e NetBeans 6.9.1. Qual è il problema qui?
Soluzione
Il problema è la comprensione degli oggetti contro primitive.
Più di ogni altra cosa, non vi resta che riconoscere che i nomi capitalizzati sono classi di oggetti che atto come primitivi, che sono davvero necessario solo quando è necessario inviare i dati da primitivi in ??un metodo che solo accetta oggetti. Il cast non è riuscita perché si stava tentando di lanciare un primitivo (doppia) per un oggetto (intero) al posto di un altro primitivo (int).
Ecco alcuni esempi di lavoro con primitive vs oggetti:
La classe doppio ha un metodo statico toString ():
double d = 10.0;
// wrong
System.out.println(d.toString());
// instead do this
System.out.println(Double.toString(d));
Altri metodi possono utilizzare gli operatori direttamente, piuttosto che chiamare un metodo.
double a = 10.0, b = 5.0;
// wrong
if( a.compareTo(b) > 0 ) { /* ... */ }
// instead you can simply do this:
if( a >= b) { /* ... */ }
int a = 0;
double b = 10.0;
// wrong
a = b.intValue();
// perform the cast directly.
a = (int)b;
Altri suggerimenti
I metodi che stai citano si trovano sulla classe doppia (e non nel tipo doppia primitivo). E 'sempre più efficiente utilizzare tipi primitivi, ma se avete assolutamente bisogno di questi metodi, creare un nuovo oggetto doppio in questo modo:
double d = 10.0;
Double myDouble = new Double(d);
doppia è una primitiva non un oggetto. Come tale, non ha metodi. In generale ciò che si vuole fare è utilizzare la lingua come.
double d = 1.1;
System.out.println("d= "+d); // calls Double.toString(d) for you.
int i = (int) d; // more efficient than new Double(d).intValue();
if (d >= 1.0) // does a compare.
Forse, se si dice ciò che si sta cercando di ottenere che possiamo puntare al codice Java, che lo farà.
Ogni oggetto ha un metodo toString, quindi forse il vostro JDK non è configurato correttamente in NetBeans.
Si desidera (java.lang.)Double
non il double
primitivo
tipi nativi (int
, float
, double
, ecc) non hanno metodi.