<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comentários sobre: Strings (i)mutáveis?</title>
	<atom:link href="http://blog.caelum.com.br/strings-imutaveis/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.caelum.com.br/strings-imutaveis/</link>
	<description>blog dos desenvolvedores da Caelum</description>
	<lastBuildDate>Wed, 16 May 2012 20:16:36 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
	<item>
		<title>Por: Strings em java&#8230; &#171; É ou não é&#8230;</title>
		<link>http://blog.caelum.com.br/strings-imutaveis/comment-page-1/#comment-59349</link>
		<dc:creator>Strings em java&#8230; &#171; É ou não é&#8230;</dc:creator>
		<pubDate>Thu, 13 Aug 2009 23:55:35 +0000</pubDate>
		<guid isPermaLink="false">http://blog.caelum.com.br/2007/05/21/strings-imutaveis/#comment-59349</guid>
		<description>[...] um exemplo, do blog do Caelum http://blog.caelum.com.br/2007/05/21/strings-imutaveis/  package [...]</description>
		<content:encoded><![CDATA[<p>[...] um exemplo, do blog do Caelum <a href="http://blog.caelum.com.br/2007/05/21/strings-imutaveis/" rel="nofollow">http://blog.caelum.com.br/2007/05/21/strings-imutaveis/</a>  package [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Kimie Nakahara</title>
		<link>http://blog.caelum.com.br/strings-imutaveis/comment-page-1/#comment-10661</link>
		<dc:creator>Kimie Nakahara</dc:creator>
		<pubDate>Tue, 29 May 2007 07:56:17 +0000</pubDate>
		<guid isPermaLink="false">http://blog.caelum.com.br/2007/05/21/strings-imutaveis/#comment-10661</guid>
		<description>&quot;...aqueles que não conheciam ou não sabiam o poder da API de Reflection, viram que com um simples código, conseguimos “mutar” uma String, imaginem com um pouco mais de código o que não é possível de se fazer.&quot;

Ainda para os que nao conhecem, um ponto a considerar: setar atributos  via reflection tem um overhead consideravel, especialmente por causa da checagem de validacao de acesso. &lt;a href=&quot;http://java.sun.com/docs/books/tutorial/reflect/member/fieldValues.html&quot; title=&quot;sun&quot; rel=&quot;nofollow&quot;&gt;.

Mas parar para pensar em como fazer uma String mutavel, isso e muito filosofia! Legal!</description>
		<content:encoded><![CDATA[<p>&#8220;&#8230;aqueles que não conheciam ou não sabiam o poder da API de Reflection, viram que com um simples código, conseguimos “mutar” uma String, imaginem com um pouco mais de código o que não é possível de se fazer.&#8221;</p>
<p>Ainda para os que nao conhecem, um ponto a considerar: setar atributos  via reflection tem um overhead consideravel, especialmente por causa da checagem de validacao de acesso. <a href="http://java.sun.com/docs/books/tutorial/reflect/member/fieldValues.html" title="sun" rel="nofollow">.</p>
<p>Mas parar para pensar em como fazer uma String mutavel, isso e muito filosofia! Legal!</a></p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Dimas</title>
		<link>http://blog.caelum.com.br/strings-imutaveis/comment-page-1/#comment-10512</link>
		<dc:creator>Dimas</dc:creator>
		<pubDate>Sat, 26 May 2007 08:15:41 +0000</pubDate>
		<guid isPermaLink="false">http://blog.caelum.com.br/2007/05/21/strings-imutaveis/#comment-10512</guid>
		<description>Hahaha... vou pregar uma peça em alguém usando isso =) hahaha</description>
		<content:encoded><![CDATA[<p>Hahaha&#8230; vou pregar uma peça em alguém usando isso =) hahaha</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Antonio Kantek</title>
		<link>http://blog.caelum.com.br/strings-imutaveis/comment-page-1/#comment-10479</link>
		<dc:creator>Antonio Kantek</dc:creator>
		<pubDate>Fri, 25 May 2007 14:27:03 +0000</pubDate>
		<guid isPermaLink="false">http://blog.caelum.com.br/2007/05/21/strings-imutaveis/#comment-10479</guid>
		<description>HACKERS ! ehehhe</description>
		<content:encoded><![CDATA[<p>HACKERS ! ehehhe</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Rodrigo Urubatan</title>
		<link>http://blog.caelum.com.br/strings-imutaveis/comment-page-1/#comment-10424</link>
		<dc:creator>Rodrigo Urubatan</dc:creator>
		<pubDate>Wed, 23 May 2007 21:02:01 +0000</pubDate>
		<guid isPermaLink="false">http://blog.caelum.com.br/2007/05/21/strings-imutaveis/#comment-10424</guid>
		<description>Isto não é nada, imagina se alguem resolve fazer algo assim:
&lt;code&gt;&lt;pre&gt;
public class Teste
{
	public static void main(String[] args) throws Exception
	{
		String str = &quot;Rodrigo Urubatan&quot;;
		mudaString(str);
		System.out.println(&quot;Rodrigo Urubatan&quot;);
	}

	private static void mudaString(String str) throws Exception
	{
		String ref = str.intern();
		Field value = String.class.getDeclaredField(&quot;value&quot;); // 1
		value.setAccessible(true); // 2
		char[] charsDaString = (char[]) value.get(ref); // 3
		charsDaString[0] = &#039;r&#039;;
		charsDaString[1] = &#039;O&#039;;
		charsDaString[2] = &#039;D&#039;;
		charsDaString[3] = &#039;R&#039;;
		charsDaString[4] = &#039;I&#039;;
	}
}
&lt;/pre&gt;&lt;/code&gt;
Ou seja, brincar exatamente com o pool interno de strings do Java, que foi mencionado pelo Thadeu. E é bem parecido com o artigo, mas é de deixar o cidadão maluquinho :D</description>
		<content:encoded><![CDATA[<p>Isto não é nada, imagina se alguem resolve fazer algo assim:<br />
<code>
<pre>
public class Teste
{
	public static void main(String[] args) throws Exception
	{
		String str = "Rodrigo Urubatan";
		mudaString(str);
		System.out.println("Rodrigo Urubatan");
	}

	private static void mudaString(String str) throws Exception
	{
		String ref = str.intern();
		Field value = String.class.getDeclaredField("value"); // 1
		value.setAccessible(true); // 2
		char[] charsDaString = (char[]) value.get(ref); // 3
		charsDaString[0] = 'r';
		charsDaString[1] = 'O';
		charsDaString[2] = 'D';
		charsDaString[3] = 'R';
		charsDaString[4] = 'I';
	}
}
</pre>
<p></code><br />
Ou seja, brincar exatamente com o pool interno de strings do Java, que foi mencionado pelo Thadeu. E é bem parecido com o artigo, mas é de deixar o cidadão maluquinho <img src='http://caelum.wpengine.netdna-cdn.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Lennon Jesus</title>
		<link>http://blog.caelum.com.br/strings-imutaveis/comment-page-1/#comment-10423</link>
		<dc:creator>Lennon Jesus</dc:creator>
		<pubDate>Wed, 23 May 2007 21:01:32 +0000</pubDate>
		<guid isPermaLink="false">http://blog.caelum.com.br/2007/05/21/strings-imutaveis/#comment-10423</guid>
		<description>A discussão é muito interessante...

Contudo, para os novatos, que pretendem tirar a certificação SCJP, há dois bons caminhos:

- manter fixa na cabeça a idéia de que Strings são eternamente imutáveis;
- aprender a fundo os recursos de Reflection e, ainda assim, manter a idéia de que Strings são eternamente imutáveis (já que na prova de certificação, basta saber que Strings são imutáveis!).

Enfim, a redundância que usei no que disse acima é para que os que estão iniciando e buscam dicas para a certificação não esqueçam que Strings são imutáveis! :)

Abraços a todos.</description>
		<content:encoded><![CDATA[<p>A discussão é muito interessante&#8230;</p>
<p>Contudo, para os novatos, que pretendem tirar a certificação SCJP, há dois bons caminhos:</p>
<p>- manter fixa na cabeça a idéia de que Strings são eternamente imutáveis;<br />
- aprender a fundo os recursos de Reflection e, ainda assim, manter a idéia de que Strings são eternamente imutáveis (já que na prova de certificação, basta saber que Strings são imutáveis!).</p>
<p>Enfim, a redundância que usei no que disse acima é para que os que estão iniciando e buscam dicas para a certificação não esqueçam que Strings são imutáveis! <img src='http://caelum.wpengine.netdna-cdn.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Abraços a todos.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Galmeida</title>
		<link>http://blog.caelum.com.br/strings-imutaveis/comment-page-1/#comment-10364</link>
		<dc:creator>Galmeida</dc:creator>
		<pubDate>Tue, 22 May 2007 01:27:25 +0000</pubDate>
		<guid isPermaLink="false">http://blog.caelum.com.br/2007/05/21/strings-imutaveis/#comment-10364</guid>
		<description>Cara, pelo amor de deus, não fica espalhando essas coisas por aí que vai ter gente que vai achar isso bonito e vai querer usar, hehehe</description>
		<content:encoded><![CDATA[<p>Cara, pelo amor de deus, não fica espalhando essas coisas por aí que vai ter gente que vai achar isso bonito e vai querer usar, hehehe</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Thadeu</title>
		<link>http://blog.caelum.com.br/strings-imutaveis/comment-page-1/#comment-10359</link>
		<dc:creator>Thadeu</dc:creator>
		<pubDate>Mon, 21 May 2007 21:40:25 +0000</pubDate>
		<guid isPermaLink="false">http://blog.caelum.com.br/2007/05/21/strings-imutaveis/#comment-10359</guid>
		<description>Ola guilherme, faca o teste que o paulo colocou :)</description>
		<content:encoded><![CDATA[<p>Ola guilherme, faca o teste que o paulo colocou <img src='http://caelum.wpengine.netdna-cdn.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Paulo Silveira</title>
		<link>http://blog.caelum.com.br/strings-imutaveis/comment-page-1/#comment-10354</link>
		<dc:creator>Paulo Silveira</dc:creator>
		<pubDate>Mon, 21 May 2007 20:23:26 +0000</pubDate>
		<guid isPermaLink="false">http://blog.caelum.com.br/2007/05/21/strings-imutaveis/#comment-10354</guid>
		<description>Oi Guilherme. O Thadeu esta correto, a funcao que voce passou nao altera, de forma alguma, a String:

&lt;code&gt;&lt;pre&gt;
class X {
  static void alteraString(String str){
    str = “Outro valor”;
  }
}&lt;/pre&gt;
&lt;/code&gt;

se voce fizer no main da classe X:

&lt;code&gt;
String str = &quot;Guilherme&quot;
alteraString(str);
System.out.println(str);
&lt;/code&gt;

Vai imprimir Guilherme. Faça voce mesmo o teste. Creio que voce nao tenha lido corretamente o Kabutz, la ele diz praticamente a mesma coisa que o Thadeu fala aqui.</description>
		<content:encoded><![CDATA[<p>Oi Guilherme. O Thadeu esta correto, a funcao que voce passou nao altera, de forma alguma, a String:</p>
<p><code>
<pre>
class X {
  static void alteraString(String str){
    str = “Outro valor”;
  }
}</pre>
<p></code></p>
<p>se voce fizer no main da classe X:</p>
<p><code><br />
String str = "Guilherme"<br />
alteraString(str);<br />
System.out.println(str);<br />
</code></p>
<p>Vai imprimir Guilherme. Faça voce mesmo o teste. Creio que voce nao tenha lido corretamente o Kabutz, la ele diz praticamente a mesma coisa que o Thadeu fala aqui.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Guilherme Santos</title>
		<link>http://blog.caelum.com.br/strings-imutaveis/comment-page-1/#comment-10350</link>
		<dc:creator>Guilherme Santos</dc:creator>
		<pubDate>Mon, 21 May 2007 19:55:50 +0000</pubDate>
		<guid isPermaLink="false">http://blog.caelum.com.br/2007/05/21/strings-imutaveis/#comment-10350</guid>
		<description>&quot;Pelo que conhecemos, independentemente do conteúdo da função alteraString(String), nunca conseguiríamos alterar o conteúdo referenciado por nome, certo? Errado!!!!&quot;

Errado mesmo...pelo que conhecemos a função alteraString(String) pode fazer o que quiser com o objeto nome de maneira muito simples sem uso de nenhuma API de reflexão. Como por exemplo:

&lt;code&gt;&lt;pre&gt;
public void alteraString(String str){
  str = &quot;Outro valor&quot;;
}
&lt;/pre&gt;&lt;/code&gt;

Eu acho que o que o Thadeu quis mostrar foi algo como:

&lt;code&gt;&lt;pre&gt;
main(String[] args){
  mutaString();
  System.out.println(&quot;Thadeu de Russo&quot;);
}
&lt;/pre&gt;&lt;/code&gt;

Onde quando todos esperam que o output seja &quot;Thadeu de Russo&quot; na verdade pode ser qualquer outra coisa se no método mutaString() foi usada a API de reflexão.

Mais detalhes dessa brincadeira com Strings pode ser visto no site Sulafricano http://www.javaspecialists.co.za/archive/newsletter.do?issue=014&amp;locale=en_US</description>
		<content:encoded><![CDATA[<p>&#8220;Pelo que conhecemos, independentemente do conteúdo da função alteraString(String), nunca conseguiríamos alterar o conteúdo referenciado por nome, certo? Errado!!!!&#8221;</p>
<p>Errado mesmo&#8230;pelo que conhecemos a função alteraString(String) pode fazer o que quiser com o objeto nome de maneira muito simples sem uso de nenhuma API de reflexão. Como por exemplo:</p>
<p><code>
<pre>
public void alteraString(String str){
  str = "Outro valor";
}
</pre>
<p></code></p>
<p>Eu acho que o que o Thadeu quis mostrar foi algo como:</p>
<p><code>
<pre>
main(String[] args){
  mutaString();
  System.out.println("Thadeu de Russo");
}
</pre>
<p></code></p>
<p>Onde quando todos esperam que o output seja &#8220;Thadeu de Russo&#8221; na verdade pode ser qualquer outra coisa se no método mutaString() foi usada a API de reflexão.</p>
<p>Mais detalhes dessa brincadeira com Strings pode ser visto no site Sulafricano <a href="http://www.javaspecialists.co.za/archive/newsletter.do?issue=014&#038;locale=en_US" rel="nofollow">http://www.javaspecialists.co.za/archive/newsletter.do?issue=014&#038;locale=en_US</a></p>
]]></content:encoded>
	</item>
</channel>
</rss>

