| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/08/2006 16:33:46
|
marques_eder
Thread.start()
![[Avatar]](/images/avatar/126c2da128e5b044dc53405c25b4d8de.jpg)
Membro desde: 21/05/2005 11:29:27
Mensagens: 29
Localização: Rio Preto/SP
Offline
|
Olá galera, blz.
Eu estou com um desafio pra vcs. Eu quero imprimir o endereço de memória de um objeto String. Será que tem jeito de fazer isso?
Se fosse outra classe, eu poderia sobrepor o toString() e fazer uma chamada super pra pegar o toString da classe Object que imprime o nome da classe e o hexa da memória. No entanto, a classe String é final, logo não posso estendê-la pra fazer a sobreposição.!!
E ai, existe um jeito de fazer isso???
|
------------------------------------------------------
Nunca percas a humildade de eterno aprendiz.
Sun Certified Java Programmer SCJP 1.5
Bacharel em Física - USP, São Paulo
Curioso & Apaixonado por Java
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/08/2006 16:44:27
|
davidbuzatto
Moderador
![[Avatar]](/images/avatar/7ba6d33c373fea56b7258003b16c68e5.jpg)
Membro desde: 07/08/2004 23:47:57
Mensagens: 4013
Localização: Vargem Grande do Sul - SP
Offline
|
Pq vc quer isso?
|
Seja educado. Agradeça quem te ajudou. Não custa nada.
Dúvidas de Java? Utilize o fórum! Não respondo via MP.
"Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Fowler)
"A vida é um escândalo, e no final dá sempre errado. O que humaniza o homem é o fracasso."
http://davidbuzatto.com.br | GitHub | uHunt | CV Lattes | Last.fm |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/08/2006 17:09:26
|
dudaskank
GUJ Ranger
Membro desde: 12/09/2003 14:59:26
Mensagens: 850
Localização: Suzano, SP, Brasil
Offline
|
hmm, na verdade o toString() da classe Object é isso aqui olha:
Ou seja, nada de endereço de memória, e sim o seu hashCode...
Porém, acho que teria um meio de se imprimir o endereço de memória sim... mas usando JNI. Você passa o objeto pra rotina em C, e ele pega e retorna o endereço, que tal?
flw
|
Eduardo Oliveira
Toque a balada do amor inabalável, eterna love song de nós dois...
Página |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/08/2006 17:14:58
|
marques_eder
Thread.start()
![[Avatar]](/images/avatar/126c2da128e5b044dc53405c25b4d8de.jpg)
Membro desde: 21/05/2005 11:29:27
Mensagens: 29
Localização: Rio Preto/SP
Offline
|
Eu estou estudando pra certificação e uma das coisas que pega é que strings literais são compartilhadas . Eu quero fazer testes do tipo são tomé (ver pra crer).
Isso significa que, por exemplo:
class A {
String literalString = "ze";
String stringRef = new String("Mane");
}
class Test {
public static void main (String[] args) {
A a1 = new A();
A a2 = new A();
System.out.println("endereco a1.literalString" + pegaEndString(a1.literalString));
System.out.println("endereco a2.literalString" + pegaEndString(a2.literalString));
System.out.println("endereco a1.stringRef" + pegaEndString(a1.stringRef));
System.out.println("endereco a2.stringRef" + pegaEndString(a2.stringRef));
}
}
Se eu tivesse esse método "pegaEndString" que me dá o endereço, stringRef seriam diferentes, agora, EM TESE, literalString seria o mesmo endereço pros dois objetos a1 e a2.
Isso porque os strings literais, Java joga na memória principal e os compartilha com todos. Dizem que é uma otimização da linguagem.
Mas eu estou inseguro, gostaria de checar mesmo isso.
|
------------------------------------------------------
Nunca percas a humildade de eterno aprendiz.
Sun Certified Java Programmer SCJP 1.5
Bacharel em Física - USP, São Paulo
Curioso & Apaixonado por Java
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/08/2006 17:15:02
|
davidbuzatto
Moderador
![[Avatar]](/images/avatar/7ba6d33c373fea56b7258003b16c68e5.jpg)
Membro desde: 07/08/2004 23:47:57
Mensagens: 4013
Localização: Vargem Grande do Sul - SP
Offline
|
é verdade... num tem nada de endereço de memória... o máximo q vc conseue é o ódigo de hash.
como o dudaskank falou, talvez consiga usando o jni, mas ainda num entendi para q vc quer isso...
|
Seja educado. Agradeça quem te ajudou. Não custa nada.
Dúvidas de Java? Utilize o fórum! Não respondo via MP.
"Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Fowler)
"A vida é um escândalo, e no final dá sempre errado. O que humaniza o homem é o fracasso."
http://davidbuzatto.com.br | GitHub | uHunt | CV Lattes | Last.fm |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/08/2006 17:19:41
|
davidbuzatto
Moderador
![[Avatar]](/images/avatar/7ba6d33c373fea56b7258003b16c68e5.jpg)
Membro desde: 07/08/2004 23:47:57
Mensagens: 4013
Localização: Vargem Grande do Sul - SP
Offline
|
Mas eu estou inseguro, gostaria de checar mesmo isso.
Pq ta inseguro? Com medo q estejam mentindo para vc Hehehehehehe?
Num precisa pegar endereço de uma String para verificar se duas Strings são o mesmo objeto (ou seja, estão no mesmo bloco de memória... ou seja ainda, são a mesma coisa hehehe)
é só usar o operador ==.
Vc deve ter pulado esse detalhe nos seus estudos para a certificação... Para objetos o operador == verifica se duas referências apontam para a mesma região da memória.
Falow!
|
Seja educado. Agradeça quem te ajudou. Não custa nada.
Dúvidas de Java? Utilize o fórum! Não respondo via MP.
"Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Fowler)
"A vida é um escândalo, e no final dá sempre errado. O que humaniza o homem é o fracasso."
http://davidbuzatto.com.br | GitHub | uHunt | CV Lattes | Last.fm |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/08/2006 17:37:07
|
marques_eder
Thread.start()
![[Avatar]](/images/avatar/126c2da128e5b044dc53405c25b4d8de.jpg)
Membro desde: 21/05/2005 11:29:27
Mensagens: 29
Localização: Rio Preto/SP
Offline
|
Verdade dudaskank!!
Num dá pra imprimir mas posso resolver meu problema comparando as referencias com "==".
A origem desse meu incômodo é essa aqui oH:
class Test implements Runnable{
public void run(){
String str = "hello";
synchronized(str){
try
{
System.out.print(Thread.currentThread().getName());
Thread.sleep(500);
System.out.print(Thread.currentThread().getName());
}
catch(InterruptedException e){}
}
}
public static void main(String[] args){
new Thread(new Test(), "A").start();
new Thread(new Test(), "B").start();
}
}
Selecione uma alternativa:
A) Imprime "ABAB" ou "BABA"
B) Imprime "AABB" ou "BBAA"
C) Resultado não pode ser previsto
D) Erro de compilação
resposta B.
Mesmo sendo duas instancias de Test diferentes como alvo nas Threads, mesmo str sendo local, ainda assim a sincronização funciona pq a referencia do objeto str é compartilhada com os dois, dai aquele que obtiver o lock não permite ao outro acessar o bloco, já que sleep não libera lock.
Obrigado!!
|
------------------------------------------------------
Nunca percas a humildade de eterno aprendiz.
Sun Certified Java Programmer SCJP 1.5
Bacharel em Física - USP, São Paulo
Curioso & Apaixonado por Java
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/08/2006 17:42:01
|
marques_eder
Thread.start()
![[Avatar]](/images/avatar/126c2da128e5b044dc53405c25b4d8de.jpg)
Membro desde: 21/05/2005 11:29:27
Mensagens: 29
Localização: Rio Preto/SP
Offline
|
Foi mal davidbuzatto Errei o colega. Eu agradeci o dudaskank.
Mas agradeço tambem ao dudaskank; só que sua ideia dudaskank me dá o mesmo hashcode dos atributos pra ambos os objetos a1 e a2.
|
------------------------------------------------------
Nunca percas a humildade de eterno aprendiz.
Sun Certified Java Programmer SCJP 1.5
Bacharel em Física - USP, São Paulo
Curioso & Apaixonado por Java
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 07/08/2006 17:45:15
|
davidbuzatto
Moderador
![[Avatar]](/images/avatar/7ba6d33c373fea56b7258003b16c68e5.jpg)
Membro desde: 07/08/2004 23:47:57
Mensagens: 4013
Localização: Vargem Grande do Sul - SP
Offline
|
Hehehehe sussu!
Da umas estrelinhas para mim que fica tudo certo
Té mais! Precisando tamos ai hehehehe!
|
Seja educado. Agradeça quem te ajudou. Não custa nada.
Dúvidas de Java? Utilize o fórum! Não respondo via MP.
"Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Fowler)
"A vida é um escândalo, e no final dá sempre errado. O que humaniza o homem é o fracasso."
http://davidbuzatto.com.br | GitHub | uHunt | CV Lattes | Last.fm |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 08/08/2006 13:25:51
|
dudaskank
GUJ Ranger
Membro desde: 12/09/2003 14:59:26
Mensagens: 850
Localização: Suzano, SP, Brasil
Offline
|
marques_eder wrote:Foi mal davidbuzatto  Errei o colega. Eu agradeci o dudaskank.
Mas agradeço tambem ao dudaskank; só que sua ideia dudaskank me dá o mesmo hashcode dos atributos pra ambos os objetos a1 e a2.
Sim, o hashcode é o mesmo para strings com conteúdos iguais.
Mas eu não sabia dessa de usar a mesma região da memória não, achei interessante
flw
|
Eduardo Oliveira
Toque a balada do amor inabalável, eterna love song de nós dois...
Página |
|
|
 |
|
|