if (array instanceof Object) System.out.println("Yes!")
skaffman
6
Ah, e em C ++, tanto arrays quanto ponteiros são objetos.
R. Martinho Fernandes
2
@ R.MartinhoFernandes Todos os arrays C ++ são objetos C ++ de fato, mas há ponteiros C ++ que não são objetos C ++, ou seja, todos os ponteiros que são o resultado da avaliação de um rvalue. Os exemplos incluem &x, p+ie new int(42).
fredoverflow
1
@skaffman A mensagem não é estritamente necessária, pois de outra forma não seria compilada.
shmosel
Respostas:
197
Sim.
A seção de Especificação da linguagem Java 4.3.1 começa com:
Na linguagem de programação Java, os arrays são objetos (§4.3.1), são criados dinamicamente e podem ser atribuídos a variáveis do tipo Objeto (§4.3.2). Todos os métodos da classe Object podem ser chamados em uma matriz.
Se array é um objeto, isso não significa que é uma instância de uma classe? Se sim, posso estender essa aula?
Um Dois Três
9
Não, não faz: a especificação Java escreve : "Um objeto é uma instância de classe ou um array. Uma instância de classe é explicitamente criada por uma expressão de criação de instância de classe (§15.9). Um array é explicitamente criado por uma expressão de criação de array (§15.10). ". E não, você não pode estender uma matriz, porque a cláusula extends deve apresentar um ClassType.
Você também pode declarar int[] someIntegers = {42};, para o mesmo resultado.
Holger
7
Sim, é um objeto em Java.
Observe também que, ao fazer isso, array.lengthvocê não está invocando nenhum método, mas apenas acessando o lengthcampo do array . Existem muitos métodos estáticos na classe Arrays .
Seria importante observar que os arrays em Java têm seus próprios códigos de byte que não compartilham com objetos. Eles são certamente objetos, mas são tratados de forma ligeiramente diferente no nível inferior.
Eu diria que a resposta é sim, embora deva acrescentar que, estritamente falando, um array também é um objeto em C ++. De §1.8 [intro.object] do padrão atual (FDIS):
Cada array em java é um objeto ex int [] a = new int [2]; Portanto, new é usado para criar um objeto e como é um objeto podemos verificar o nome da classe apenas usando a.getClass (). GetName ();
Uma matriz não é uma instância de qualquer classe listada na árvore de classes, no entanto, cada matriz é um objeto e herda diretamente de java.util.Object
(newint[1])instanceofObject// -> evaluates to true
A classe java.util.Arraysé uma classe auxiliar e os arrays não são instâncias dessa classe.
Arrays herdam todos os membros de java.lang.Object
Os arrays substituem o método clone()herdado de Object.
Arrays implementam o campo length , que contém o número de componentes do array. comprimento pode ser positivo ou zero. É publice final.
Arrays implementam as interfaces Cloneable e java.io.Serializable.
8a. Arrays são suportados porClass<T> . Você pode recuperar a Class<T>instância de uma instância de array
(newint[2]).getClass()
ou de um tipo de array
int[].class
8b. Uma instância de classe de reflexão única (ou seja, uma instância de java.lang.Class<T>) é criada para cada tipo de array diferente em seu código. Exemplos
Os membros de um tipo de matriz são todos os seguintes:
O campo público final length, que contém o número de componentes da matriz. comprimento pode ser positivo ou zero.
O método público clone, que substitui o método de mesmo nome na classe Objecte não lança exceções verificadas. O tipo de retorno do clonemétodo de um tipo de array T[]é T[].
Um clone de uma matriz multidimensional é superficial, o que significa que ele cria apenas uma única nova matriz. Subarrays são compartilhados.
Todos os membros herdados da classe Object; o único método de Object que não é herdado é seu método clone.
if (array instanceof Object) System.out.println("Yes!")
&x
,p+i
enew int(42)
.Respostas:
Sim.
A seção de Especificação da linguagem Java 4.3.1 começa com:
fonte
Sim; a especificação da linguagem Java escreve :
fonte
Bem, vamos perguntar ao Java!
Resultado:
fonte
int[] someIntegers = {42};
, para o mesmo resultado.Sim, é um objeto em Java.
Observe também que, ao fazer isso,
array.length
você não está invocando nenhum método, mas apenas acessando olength
campo do array . Existem muitos métodos estáticos na classe Arrays .fonte
Seria importante observar que os arrays em Java têm seus próprios códigos de byte que não compartilham com objetos. Eles são certamente objetos, mas são tratados de forma ligeiramente diferente no nível inferior.
fonte
Eu diria que a resposta é sim, embora deva acrescentar que, estritamente falando, um array também é um objeto em C ++. De §1.8 [intro.object] do padrão atual (FDIS):
fonte
Só quero acrescentar que os arrays têm uma representação na API de reflexão - java.lang.reflect.Array .
fonte
Cada array em java é um objeto ex int [] a = new int [2]; Portanto, new é usado para criar um objeto e como é um objeto podemos verificar o nome da classe apenas usando a.getClass (). GetName ();
fonte
java.util.Object
java.util.Arrays
é uma classe auxiliar e os arrays não são instâncias dessa classe.java.lang.reflect.Array
é uma classe auxiliar e os arrays não são instâncias dessa classe.Arrays herdam todos os membros de
java.lang.Object
Os arrays substituem o método
clone()
herdado deObject
.Arrays implementam o campo
length
, que contém o número de componentes do array. comprimento pode ser positivo ou zero. Épublic
efinal
.Arrays implementam as interfaces
Cloneable
ejava.io.Serializable
.8a. Arrays são suportados por
Class<T>
. Você pode recuperar aClass<T>
instância de uma instância de arrayou de um tipo de array
8b. Uma instância de classe de reflexão única (ou seja, uma instância de
java.lang.Class<T>
) é criada para cada tipo de array diferente em seu código. ExemplosREFERÊNCIAS
Da especificação Java Seção 4.3.1 Objetos
Um objeto é uma instância de classe ou um array.
Uma instância de classe é explicitamente criada por uma expressão de criação de instância de classe.
Um array é explicitamente criado por uma expressão de criação de array.
De java.util.Arrays
De java.lang.reflect.Array
Da Seção 10.1 Objetos
A superclasse direta de um tipo de array é
Object
.Cada tipo de array implementa as interfaces
Cloneable
ejava.io.Serializable
.Da Seção 10.7 Membros do Array
Os membros de um tipo de matriz são todos os seguintes:
O campo público final
length
, que contém o número de componentes da matriz. comprimento pode ser positivo ou zero.O método público
clone
, que substitui o método de mesmo nome na classeObject
e não lança exceções verificadas. O tipo de retorno doclone
método de um tipo de arrayT[]
éT[]
.Um clone de uma matriz multidimensional é superficial, o que significa que ele cria apenas uma única nova matriz. Subarrays são compartilhados.
Todos os membros herdados da classe Object; o único método de Object que não é herdado é seu método clone.
fonte
Matrizes de qualquer coisa são objetos. Pode-se chamar métodos tais como
equals
,hashcode
etc:Não se pode chamar métodos em um tipo nativo.
fonte
Observe o trecho de código e a saída abaixo.
}
claramente o array a é tratado como objeto.
fonte