Afinal, java tem ou nÃo tem ponteiro?

Polemico e confuso, Serve tanto para iniciantes aprender, como para Avançados discutir…

A primeira vez que eu ouvi falar de Java, ouvi falar um pouco de ponteiro,e me falaram que java nao tem ponteiroo…

Até que…

COm um dos melhores programadors que eu já conheci em todo o Brasil, me falou qeu Java tem ponteiro sim!!!

programando mais hoje em dia, criandos alguns aplicativos que pode fazer conversação simultanea numa Lan por exemplo, notei o quanto é importante este “ponteiro”. Tem função de ponteiro e é igual um ponteiro…

pra mim é ponteiro!
Mas eu quero saber?

Afinal, Java tem ponteiro ou não? se tem ou se não tem tente explicar pq vc defendeu essa tese!.

[]'s para todos!

Java não tem ponteiros para ponteiros ou ponteiros para primitivos (como C tem), de resto tem ponteiro sim e se chama referencia.

Se não tivesse ‘ponteiro’ esse código iria imprimir 10

public class Teste {

	static class Foo {
		public int i;
	}

	static void mudaAlgo(Foo foo) {
		foo.i = 20;
	}

	public static void main(String[] args) {
		Foo foo = new Foo();
		foo.i = 10;
		mudaAlgo(foo);
		System.out.println(foo.i);
	}
}

http://www.guj.com.br/posts/list/23110.java

Abraço.

Não se pode dizer que Java tem ponteiros pois um dos principios básicos de ponteiros é que eles podem ser manipulados, usando aritmética de ponteiros e que se pode ter acesso direto ao endereço de memória e manipulá-lo, como isso não é possível em Java, então Java não tem ponteiro propriamente dito, mas tem um conceito semelhante chamado referência mas que não pode ser manipulado de nenhuma forma.

Então, mas se vc fizer uma analogia de ponteiro como algo que aponta para algo, eu acho que pode-se dizer que tem sim, só que mascarado, sem todas possibilidades que C permite, que então chamamos de referencia.
Mas bah, isso ai eh como time de futebol, cada um tem sua opinião, importante eh saber usar certo :wink:

Se ponteiro for tratado simplesmente como um endereço de memória, sim, Java tem. Porém a definição mais usada para ponteiro é um “endereço manipulável de memória”, o que não se aplica a Java.