Eu tenho uma int
matriz que não possui elementos e estou tentando verificar se está vazia.
Por exemplo, por que a condição da instrução if no código abaixo nunca é verdadeira?
int[] k = new int[3];
if (k == null) {
System.out.println(k.length);
}
Respostas:
Há uma diferença fundamental entre uma
null
matriz e uma matriz vazia. Este é um teste paranull
."Vazio" aqui não tem significado oficial. Eu estou escolhendo definir vazio como tendo 0 elementos:
Uma definição alternativa de "vazio" é se todos os elementos forem
null
:ou
fonte
obj !- null
provavelmente deve ser #obj != null
null
é de um tipo diferente.ArrayUtils.isNotEmpty(testArrayName)
do pacoteorg.apache.commons.lang3
garante que a matriz não seja nula ou vaziafonte
Veja o seu comprimento:
Embora seja mais seguro verificar se há nulo ao mesmo tempo:
fonte
O método para verificar a matriz como nulo ou vazio também está presente em org.apache.commons.lang:
fonte
Eu sou do fundo .net. No entanto, java / c # são mais / menos iguais.
Se você instanciar um tipo não primitivo (matriz no seu caso), ele não será nulo.
Por exemplo,
int[] numbers = new int[3];
neste caso, o espaço é alocado e cada elemento tem um valor padrão de 0.
Será
null
, quando você não fizernew
isso.por exemplo
fonte
numbers
ainda não foi inicializado. "Não inicializado" enull
não são a mesma coisa.int[] numbers
alteradaint[] numbers == null
; Em c #, não é o caso.Uma matriz int é inicializada com zero, portanto nunca conterá nulos. Somente matrizes de objetos conterão nulo inicialmente.
fonte
O ponto aqui de maneira muito simples é que a variável k não é nula porque aponta para a matriz. Não importa que a própria matriz esteja vazia. O teste nulo em sua postagem só seria avaliado como verdadeiro se a variável k não apontasse para nada.
fonte
Eu testei como abaixo. Espero que ajude.
fonte
Uma
int
matriz sem elementos não é necessariamentenull
. Será apenasnull
se ainda não tiver sido alocado. Consulte este tutorial para obter mais informações sobre matrizes Java.Você pode testar o comprimento da matriz:
fonte
Isso é o mais próximo que cheguei da verificação de se uma matriz int está vazia. Embora isso não funcione quando as entradas na matriz são realmente zero. Ele funcionará para {1,2,3} e ainda retornará false se {2,0}, mas {0} retornará true
fonte
No Java 8+, você consegue isso com a ajuda do método allMatch de fluxos.
Para primitivo:
Para objeto:
fonte
Eu acredito que o que você quer é
Você o atualizou para que nunca fosse nulo.
fonte
Você também pode verificar se há algum elemento na matriz, descobrindo seu comprimento e colocá-lo na instrução if-else para verificar se é nulo.
fonte