2009-06-04 10 views
26

Aunque sé que, por definición, un booleano consta de solo dos estados, verdadero o falso. Me preguntaba qué valor tiene un booleano antes de inicializarse con uno de estos estados.¿Cuál es el tercer estado booleano en java?

+48

El tercer estado booleano suele ser FileNotFound. – Brian

+6

@Brian, ¿eso no depende de si implementa Paula Bean? –

+11

@Paul: cuando no estás observando, no existe. La función cuántica se colapsa solo cuando abre la puerta: D – talonx

Respuesta

69

It defaults to false.

Editar: Por demanda popular:

menos que esté utilizando el Boolean envuelto, que por defecto es nulo. - sudhir.j

+3

En general, las variables de Java son predeterminadas a lo que los programadores de C pueden llamar valores "falsey", p. Ej. 0, nulo, falso, etc. – hbw

+11

, a menos que esté utilizando Boolean envuelto, que se establece por defecto en nulo. –

+0

@ sudhir.j absolutamente correcto. Espero que la respuesta sea editada para incluir eso. –

16

Si se trata de una variable local, es un error del compilador hacer referencia a ella antes de que se haya inicializado. Si es un campo, se inicializa a falso.

+0

Igual va para los contenidos de la matriz –

1

En JAVA, los tipos booleanos son por defecto False.

2

No hay un tercer estado. Como @Yishai dijo, si no asigna un valor, los campos booleanos son por defecto falsos. Las variables locales deben ser asignados antes de su uso:

Acceso a una variable de inicializar locales dará lugar a un tiempo de compilación de error

Ver the doc.

0

Si había algo así como

boolean isTrue; 

System.out.println(isTrue); 

Debe obtener un error de tiempo de compilación porque el booleano no se ha inicializado. Por defecto, cuando intente inicializar esto, se establecerá en falso;

+2

Sí, pero si boolean es una variable de instancia, su valor predeterminado es falso, sin advertencia. –

9
public class NewMain { 

    boolean foo; 
    Boolean bar; 

    public static void main(String[] args) { 
     NewMain obj = new NewMain(); 

     obj.whatBoolean(); 
    } 

    public void whatBoolean() { 
     System.out.println(foo); 
     System.out.println(bar); 
    } 
} 

salidas

false 
null 

Sé que esto era más filosófica de una pregunta, pero gracias a autoboxing puede utilizar Java como un lenguaje orientado a objetos casi de verdad (me gusta tener los tipos primitivos ... ahora sólo si funcionaría al revés también). Sin embargo, cambia el comportamiento cuando usa un objeto (para la mejor IMO).

1

FYI, booleano predeterminado a falso, los números primitivos predeterminados a 0, 0L, 0f o 0d según corresponda, char tiene como valor predeterminado '\ 0', referencias de objeto (como booleano) predeterminadas a nulas.

Esto también se aplica al contenido de las matrices. (Un problema común es que una matriz de Objetos está inicialmente llena de valores nulos)

Cuestiones relacionadas