Tipos de datos básicos de Java

1. ¿Cuáles son los tipos de datos básicos de Java que ocupan varios bytes cada uno?

Recuerda según la fórmula:

● Tipo de datos: byte short int long float double boolean char

● Número de bytes ocupados: 1284812 (el byte corresponde a 1, el corto corresponde a 2, y así sucesivamente)

2. ¿Es String un tipo de datos básico?

Como puede ver en el código fuente de JDK, Stirng es una clase, un tipo de referencia y la capa inferior se implementa con una matriz de caracteres.

3. ¿El corto s1 = 1; s1 = s1 + 1; incorrecto? ¿El corto s1 = 1; s1 + = 1 es incorrecto?

El primero es incorrecto y el segundo es correcto.

Para short s1 = 1; s1 = s1 + 1; Dado que 1 es un tipo int, el resultado de la operación s1 + 1 también es un tipo int, y el tipo debe convertirse para asignar un valor al tipo short.

Y corto s1 = 1; s1 + = 1; se puede compilar correctamente, porque s1 + = 1; es equivalente a s1 = (corto) (s1 + 1); hay una conversión de tipo implícita.

4. ¿Cuál es la diferencia entre int e Integer?

Java es un lenguaje de programación completamente orientado a objetos, pero para la conveniencia de la programación, se introducen tipos de datos básicos. Para poder tratar estos tipos de datos básicos como objetos, Java introduce una clase contenedora correspondiente para cada tipo de datos básicos. , La clase de empaquetado de int es Integer Desde Java 5, se ha introducido un mecanismo automático de empaquetado / desempaquetado, de modo que los dos se pueden convertir entre sí.

Java proporciona tipos de paquetes para cada tipo primitivo:

● Tipos de datos básicos: booleano, char, byte, short, int, long, float, double

● Tipo de empaquetado: booleano, carácter, byte, corto, entero, largo, flotante, doble

5. ¿Cuál es el resultado de la salida de comparación numérica del siguiente tipo de entero?

Prueba de clase pública { principal vacía estática pública (Cadena [] argumentos) { Entero f1 = 100, f2 = 100, f3 = 150, f4 = 150; System.out.println (f1 == f2); System.out.println (f3 == f4); } }





Si no comprende el principio, es fácil pensar que ambas salidas son verdaderas o falsas. Lo primero que hay que tener en cuenta es que las cuatro variables f1, f2, f3 y f4 son referencias a objetos enteros, por lo que la siguiente operación == no compara valores sino referencias. ¿Cuál es la esencia del boxeo? Cuando asignamos un valor int a un objeto Integer, llamaremos al método estático valueOf de la clase Integer.Si miramos el código fuente de valueOf, sabremos qué sucedió.


public static Integer valueOf(int i) {
    
    
    if (i >= IntegerCache.low && i <= IntegerCache.high)
        return IntegerCache.cache[i + (-IntegerCache.low)];
    return new Integer(i);
}
 

IntegerCache es una clase interna de Integer y su código es el siguiente:


private static class IntegerCache {
    
    
    static final int low = -128;
    static final int high;
    static final Integer cache[];

    static {
    
    
        // high value may be configured by property
        int h = 127;
        String integerCacheHighPropValue =
            sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
        if (integerCacheHighPropValue != null) {
    
    
            try {
    
    
                int i = parseInt(integerCacheHighPropValue);
                i = Math.max(I, 127);
                // Maximum array size is Integer.MAX_VALUE
                h = Math.min(I, Integer.MAX_VALUE - (-low) -1);
            } catch( NumberFormatException nfe) {
    
    
                // If the property cannot be parsed into an int, ignore it.
            }
        }
        high = h;

        cache = new Integer[(high - low) + 1];
        int j = low;
        for(int k = 0; k < cache.length; k++)
            cache[k] = new Integer(j++);

        // range [-128, 127] must be interned (JLS7 5.1.7)
        assert IntegerCache.high >= 127;
    }

    private IntegerCache() {
    
    }
}
 

En pocas palabras, si el valor del literal entero está entre -128 y 127, entonces el nuevo objeto Integer no será nuevo, pero el objeto Integer en el grupo constante será referenciado directamente, por lo que f1 en la pregunta de la entrevista anteriorEl resultado de f2 es verdadero y f3El resultado de f4 es falso.

Supongo que te gusta

Origin blog.csdn.net/weixin_38019299/article/details/108095905
Recomendado
Clasificación