Comando for

4 respostas
dntalemao

Galera, por exemplo:

for (int i=0; i<10;i++){

    int d;
    d=1
    d++;
    System.out.print(d+" ");

}

A saída gerada será um sequência de 2 dez vezes, a instrução int d, zera a variável d novamente ou cria outra em memória, de acordo com as repetições?
Outra dúvida, meio boba tbém, mas por exemplo:

int i=i+1; // não podemos fazer isso;

no caso, são duas instruções, uma pedindo para alocar espaço para um int e outra atribuindo a mesma variável + 1, porém li que o JVM lê as instruções da esquerda para direita, então ela irá ler primeiro a parte para alocar memória para um int i e usar o nome “i” como referência, então no caso a variável já vai existir e já poderia ser usada? Como aconteceu nesse exemplo ai, creio que só não é permitido pois eu poderia usar valores inválidos de memória já liberados pelo SO :shock:
Não sei se consegui ser claro…
Obrigado

4 Respostas

War_Paz
for (int i=0; i<10;i++){  
  
    int d;  
    d=1  
    d++;  
    System.out.print(d+" ");  
  
}

Para usar a variável "d" do modo que você quer, você tem que declarar e inicializar ela fora do loop 'for'. Do jeito que você tá fazendo, toda vez que o loop for reexecutado ela vai ser declarada e inicializada com valor 1, e depois você incrementa mais 1 a ela, tomando o valor 2 e depois imprimindo-a. Tente desse modo:

int d = 1;
		for (int i=0; i<10;i++){    
		    d++;  
		    System.out.print(d+" ");  
		}

No segundo caso, você vai pegar erros na sua IDE por que a variável "i" ainda não foi inicializada, só declarada. Você basicamente está dizendo:
"i é igual a i mais 1"
Mas i ainda não tem nenhum valor. Tente o seguinte:

public static void main(String e[]){
		int i; // Declarando a variável
		i = 0; // Inicializando com valor "0"
		i++;   // Incrementando "1" à variável
		System.out.println(i); // Imprimindo
	}

Boa sorte :)

dntalemao

pois é, fazendo dessa maneira da certo, porém minha dúvida seria mais em relação se a variável que foi declarada no início do for permanece no mesmo endereço de memória que ela estava antes, ou se a cada ciclo de loop ela é declarada em outra posição, pois pelo que eu sei, variáveis locais apenas deixam de ser ativas quando o método não está mais na pilha de chamadas. Vlw a força cara! 8)

Ziru
int i=i+1; // não podemos fazer isso;

Está dizendo assim "i vai receber o seu valor atual + um outro valor qualquer, seria o mesmo que usar.

int i += 1; //caso não inicialize i com nenhum valor ele irá receber 0 por padrão, então será 0 + 1.
dntalemao
Ziru:
int i=i+1; // não podemos fazer isso;

Está dizendo assim "i vai receber o seu valor atual + um outro valor qualquer, seria o mesmo que usar.

int i += 1; //caso não inicialize i com nenhum valor ele irá receber 0 por padrão, então será 0 + 1.

descobri como funciona o comportamento das variáveis declaradas e inicializadas dentro de um bloco de comando de repetição, utilizando esse código:

public static void main(String[] args) throws Exception {
	while(true) {
            int [] array = new int[100000];
            System.out.println("Bytes livres: "+ Runtime.getRuntime().freeMemory());
            Thread.sleep(200);
	}
}

gerando a seguinte saída:

Bytes livres: 50255976
Bytes livres: 49855960
Bytes livres: 49455944
Bytes livres: 49055928
Bytes livres: 48655912
Bytes livres: 48255896
Bytes livres: 47855880
Bytes livres: 47455864
Bytes livres: 47055848
Bytes livres: 46655832
Bytes livres: 62015616
Bytes livres: 60957408
Bytes livres: 60557392
Bytes livres: 60157376

o que ocorre é que a variável array é uma variável local, após cada loop a referência dela é descartada e criada novamente na próxima iteração, note que a memória disponível foi diminuindo no começo e logo após aumentando, ou seja, o coletor de lixo entrou em ação.
Galera vlw pela ajuda.
abraços

Criado 23 de setembro de 2012
Ultima resposta 23 de set. de 2012
Respostas 4
Participantes 3