Então, eu estou declarando e inicializando uma matriz int:
static final int UN = 0;
int[] arr = new int[size];
for (int i = 0; i < size; i++) {
arr[i] = UN;
}
Digamos que eu faça isso ...
int[] arr = new int[5];
System.out.println(arr[0]);
... 0
será impressa na saída padrão. Além disso, se eu fizer isso:
static final int UN = 0;
int[] arr = new int[5];
System.out.println(arr[0]==UN);
... true
será impressa na saída padrão. Então, como o Java está inicializando minha matriz por padrão? É seguro assumir que a inicialização padrão está definindo os índices da matriz, o 0
que significaria que eu não tenho que percorrer a matriz e inicializá-la?
Obrigado.
java
arrays
initialization
Hristo
fonte
fonte
Respostas:
Tudo em um programa Java não definido explicitamente como algo pelo programador é inicializado com um valor zero.
null
.0
.0.0
false
.'\u0000'
(cujo equivalente decimal é 0).Quando você cria uma matriz de algo, todas as entradas também são zeradas. Portanto, sua matriz contém cinco zeros logo após ser criada por
new
.Nota (com base nos comentários): A Java Virtual Machine não precisa zerar a memória subjacente ao alocar variáveis locais (isso permite operações eficientes de pilha, se necessário). Para evitar valores aleatórios, a Java Language Specification exige que as variáveis locais sejam inicializadas.
fonte
Na especificação da linguagem Java :
fonte
null
.JLS diz claramente
Um inicializador de matriz cria uma matriz e fornece valores iniciais para todos os seus componentes.
e isso independentemente da matriz ser uma variável de instância ou variável local ou variável de classe.
Valores padrão para tipos primitivos: docs
Para objetos, os valores padrão são
null
.fonte
De acordo com java,
fonte
Thorbjørn Ravn Andersen respondeu pela maioria dos tipos de dados. Como houve uma discussão acalorada sobre matriz,
Citação do jls spec http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.12.5 "o componente da matriz é inicializado com um valor padrão quando é criado"
Eu acho que independentemente de matriz é local ou instância ou variável de classe será com valores padrão
fonte
Toda classe em Java tem um construtor (um construtor é um método chamado quando um novo objeto é criado, que inicializa os campos das variáveis de classe). Portanto, quando você está criando uma instância da classe, o método construtor é chamado durante a criação do objeto e todos os valores dos dados são inicializados naquele momento.
Para o objeto do tipo de matriz inteira, todos os valores na matriz são inicializados em 0 (zero) no método construtor. Da mesma forma, para o objeto da matriz booleana, todos os valores são inicializados como false.
Portanto, Java está inicializando a matriz executando seu método construtor enquanto cria o objeto
fonte
Java diz que o comprimento padrão de uma matriz JAVA no momento da inicialização será 10.
Mas o
size()
método retorna o número de elementos inseridos na matriz e, como no momento da inicialização, se você não inseriu nenhum elemento na matriz, retornará zero.fonte