{"componentChunkName":"component---src-templates-blog-post-js","path":"/java-iniciante-pt5/","result":{"data":{"markdownRemark":{"html":"<p>Para este artigo será mostrado como podemos ter maior flexibilidade através da <strong>Sobrecarga</strong> de métodos. Também será apresentado as <strong>Classes Wrappers</strong> e o <strong>Autoboxing</strong> do <strong>Java</strong>.</p>\n<h2 id=\"Sobrecarga\" style=\"position:relative;\">Sobrecarga<a href=\"#Sobrecarga\" aria-label=\"Sobrecarga permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2>\n<p>A <strong>sobrecarga</strong> de métodos permite a pessoa que estiver desenvolvendo ter maior flexibilidade sobre um determinado método, onde pode haver vários métodos com o mesmo nome porém com parâmetros diferentes, para exemplificar vamos imaginar que você está desenvolvendo um jogo onde o personagem pode correr com algum veículo ou a pé, para esse caso pode haver várias abordagens mas para explicar <strong>sobrecarga</strong> de métodos iremos criar classes para cada tipo de veículo, então teremos as classes <strong>Carro</strong>, <strong>Moto</strong> e <strong>Bicicleta</strong> e também iremos criar a classe <strong>Personagem</strong> que irá conter a ação de acelerar:</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Carro</span> <span class=\"token punctuation\">{</span>\n\n    <span class=\"token keyword\">private</span> <span class=\"token class-name\">String</span> nome<span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token class-name\">Carro</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">String</span> nome<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>nome <span class=\"token operator\">=</span> nome<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>    \n\n    <span class=\"token keyword\">public</span> <span class=\"token class-name\">String</span> <span class=\"token function\">getNome</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">return</span> nome<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">setNome</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">String</span> nome<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>nome <span class=\"token operator\">=</span> nome<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Esse é o exemplo da classe <strong>Carro</strong>, onde ela só possui o <strong>atributo</strong> nome, o construtor recebendo o nome e os métodos <em>getter/setters</em>, as outras classes <strong>Moto</strong> e <strong>Bicicleta</strong> seguem o mesmo padrão, e agora vamos ver a classe <strong>Personagem</strong>:</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Personagem</span> <span class=\"token punctuation\">{</span>\n\n    <span class=\"token keyword\">private</span> <span class=\"token class-name\">String</span> nome<span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token class-name\">Personagem</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">String</span> nome<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>nome <span class=\"token operator\">=</span> nome<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token class-name\">String</span> <span class=\"token function\">getNome</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">return</span> nome<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">void</span> <span class=\"token function\">setNome</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">String</span> nome<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>nome <span class=\"token operator\">=</span> nome<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>A classe <strong>Personagem</strong> possui, por enquanto, apenas o atributo nome e agora vamos implementar o método <em>acelera</em> que irá retornar uma <strong>String</strong> com a informação que o <strong>Personagem</strong> está acelerando:</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">public</span> <span class=\"token class-name\">String</span> <span class=\"token function\">acelera</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token string\">\"Acelerando\"</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>O método <em>acelera</em> informa que o <strong>Personagem</strong> está acelerando mas não diz se é a pé ou com algum veículo. Poderíamos fazer da seguinte maneira:</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">public</span> <span class=\"token class-name\">String</span> <span class=\"token function\">aceleraDeBicicleta</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token string\">\"Acelerando com bicicleta\"</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token class-name\">String</span> <span class=\"token function\">aceleraComMoto</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token string\">\"Acelerando com moto\"</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token class-name\">String</span> <span class=\"token function\">aceleraComCarro</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token string\">\"Acelerando com carro\"</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token class-name\">String</span> <span class=\"token function\">acelera</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token string\">\"Acelerando a pé\"</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Mas com a <strong>sobrecarga</strong> podemos criar métodos mais específicos mantendo o mesmo nome, contanto que o parâmetro de entrada seja diferente no método, então podemos fazer da seguinte maneira:</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">public</span> <span class=\"token class-name\">String</span> <span class=\"token function\">acelera</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">Bicicleta</span> bicicleta<span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token string\">\"Acelerando com a bicicleta: \"</span> <span class=\"token operator\">+</span> bicicleta<span class=\"token punctuation\">.</span><span class=\"token function\">getNome</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token class-name\">String</span> <span class=\"token function\">acelera</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">Moto</span> moto<span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token string\">\"Acelerando com a moto: \"</span> <span class=\"token operator\">+</span> moto<span class=\"token punctuation\">.</span><span class=\"token function\">getNome</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token class-name\">String</span> <span class=\"token function\">acelera</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">Carro</span> carro<span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token string\">\"Acelerando com o carro: \"</span> <span class=\"token operator\">+</span> carro<span class=\"token punctuation\">.</span><span class=\"token function\">getNome</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token class-name\">String</span> <span class=\"token function\">acelera</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token string\">\"Acelerando a pé\"</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Foram criados mais três métodos com o mesmo nome porém com entradas diferentes, cada um recebendo um tipo diferente de veículo e o primeiro método foi melhorado para retornar um texto mais compreensível. Você pode ter notado que para a <strong>sobrecarga</strong> ocorrer não foi necessário alterar o tipo do retorno mas isso também pode ser feito porém para que isso funcione não pode haver ambiguidade para o compilador, pois pense o que iria acontecer se criássemos um método que recebe os mesmos parâmetros mas tem um retorno diferente?</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">public</span> <span class=\"token class-name\">String</span> <span class=\"token function\">acelera</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token string\">\"Acelerando a pé\"</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">int</span> <span class=\"token function\">acelera</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Aqui temos dois métodos <em>acelera</em> porém com retornos diferentes e se fossemos usar <strong>personagem.acelera();</strong> qual dos dois deveria ser executado? O compilador não tem como identificar isso e por isso esse código não compila. Agora se alterarmos:</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">public</span> <span class=\"token class-name\">String</span> <span class=\"token function\">acelera</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token string\">\"Acelerando a pé\"</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">public</span> <span class=\"token keyword\">int</span> <span class=\"token function\">acelera</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span> kmH<span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> kmH<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Pensando em um método <em>acelera</em> que recebe a quantidade quilometros por hora que deve ser acelerado; esse código compila pois o compilador já sabe diferenciar pelo parâmetro o que cada método recebe.</p>\n<p>Agora exemplificando como usar o código que foi criado:</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">void</span> <span class=\"token function\">main</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">String</span><span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span> args<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n\n    <span class=\"token class-name\">Carro</span> ferrari <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Carro</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Ferrari\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token class-name\">Moto</span> harley <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Moto</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Harley\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token class-name\">Bicicleta</span> caloi <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Bicicleta</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Caloi\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token class-name\">Personagem</span> heroi <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Personagem</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Heroi\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token class-name\">System</span><span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span>heroi<span class=\"token punctuation\">.</span><span class=\"token function\">acelera</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token class-name\">System</span><span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span>heroi<span class=\"token punctuation\">.</span><span class=\"token function\">acelera</span><span class=\"token punctuation\">(</span><span class=\"token number\">10</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token class-name\">System</span><span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span>heroi<span class=\"token punctuation\">.</span><span class=\"token function\">acelera</span><span class=\"token punctuation\">(</span>harley<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token class-name\">System</span><span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span>heroi<span class=\"token punctuation\">.</span><span class=\"token function\">acelera</span><span class=\"token punctuation\">(</span>ferrari<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token class-name\">System</span><span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span>heroi<span class=\"token punctuation\">.</span><span class=\"token function\">acelera</span><span class=\"token punctuation\">(</span>caloi<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>E a saída será:</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token class-name\">Acelerando</span> a pé\n<span class=\"token number\">10</span>\n<span class=\"token class-name\">Acelerando</span> com o moto<span class=\"token operator\">:</span> <span class=\"token class-name\">Harley</span>\n<span class=\"token class-name\">Acelerando</span> com o carro<span class=\"token operator\">:</span> <span class=\"token class-name\">Ferrari</span>\n<span class=\"token class-name\">Acelerando</span> com o bicicleta<span class=\"token operator\">:</span> <span class=\"token class-name\">Caloi</span></code></pre></div>\n<h2 id=\"Classe-Wrapper\" style=\"position:relative;\">Classe Wrapper<a href=\"#Classe-Wrapper\" aria-label=\"Classe Wrapper permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2>\n<p>As classes <strong>Wrappers</strong> são classes que foram criadas na linguagem <strong>Java</strong> para representar um tipo primitivo, elas são classes empacotadoras desses tipos primitivos. Quando em um programa usamos um tipo primitivo, por exemplo um <strong>int</strong> por padrão ele recebe um valor padrão caso nenhum valor seja passado diretamente para ele, no caso de <strong>int</strong> o valor é 0. Isso é um detalhe do <strong>Java</strong>, quer seja tipo primitivo ou não tudo recebe um valor padrão, nos casos de classes o valor padrão é <strong>null</strong>, que significa ausência de valor.</p>\n<p>No exemplo abaixo será mostrado a diferença entre o tipo primitivo <strong>int</strong> e a classe <strong>Integer</strong> que empacota o tipo <strong>int</strong>:</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">Wrapper</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">private</span> <span class=\"token keyword\">int</span> numero<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">private</span> <span class=\"token class-name\">Integer</span> numeroWrapper<span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">void</span> <span class=\"token function\">main</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">String</span><span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span> args<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n        <span class=\"token class-name\">Wrapper</span> wrapper <span class=\"token operator\">=</span> <span class=\"token keyword\">new</span> <span class=\"token class-name\">Wrapper</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token class-name\">System</span><span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span>wrapper<span class=\"token punctuation\">.</span><span class=\"token function\">getNumero</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token class-name\">System</span><span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span>wrapper<span class=\"token punctuation\">.</span><span class=\"token function\">getNumeroWrapper</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Executando esse código teremos a seguinte saída:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\"><span class=\"token number\">0</span>\nnull</code></pre></div>\n<p>Preste atenção que ao executar o programa é exibido o valor <strong>0</strong> para a variável com nome <strong>numero</strong> que é um tipo primitivo <strong>int</strong> e para a variável <strong>numeroWrapper</strong> o valor exibido é <strong>null</strong> significando que não existe um valor definido para essa variável.</p>\n<p>Pensando nisso foram criadas as classes <strong>Wrappers</strong> que representam os tipos primitivos, com isso é possível ter uma classe que representa um valor primitivo, como ocorre com <strong>int</strong>, porém sem ter um valor padrão definido a ele. Fora que por ser uma classe existem vários métodos que podem ser utilizados e que auxiliam a pessoa que estiver desenvolvendo porém não são muito usados no dia-a-dia a vantagem que particularmente eu vejo é a capacidade que uma classe <strong>Wrapper</strong> tem de não possuir um valor o que também pode ser perigoso pois se tentarmos usar um atributo que for <strong>null</strong> será lançado uma <strong>Exception</strong> do tipo <strong>NullPointerException</strong> então lembre-se de sempre atribuir um valor quando estiver usando uma classe <strong>Wrapper</strong>.</p>\n<h2 id=\"Autoboxing\" style=\"position:relative;\">Autoboxing<a href=\"#Autoboxing\" aria-label=\"Autoboxing permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2>\n<p>Classes <strong>Wrappers</strong> possuem alguns métodos, como foi citado anteriormente, entre esses métodos existe o <strong>valueOf</strong> que faz conversão de um valor primitivo para a uma classe <strong>Wrapper</strong>:</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token class-name\">Boolean</span> booleanWrapper <span class=\"token operator\">=</span> <span class=\"token class-name\">Boolean</span><span class=\"token punctuation\">.</span><span class=\"token function\">valueOf</span><span class=\"token punctuation\">(</span><span class=\"token boolean\">true</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>E o oposto também pode ocorrer com o método <em>booleanValue</em>, no caso da classe <strong>Wrapper Boolean</strong> mas para cada <strong>Wrapper</strong> existe o seu método equivalente para conversão de um objeto para o seu tipo primitivo correspondente:</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\">booleanWrapper<span class=\"token punctuation\">.</span><span class=\"token function\">booleanValue</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>Porém no <strong>Java</strong> existe o que é chamado <strong>Autoboxing</strong> e <strong>Unboxing</strong> que é a capacidade da própria linguagem realizar essas conversões para nós:</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">boolean</span> falso <span class=\"token operator\">=</span> <span class=\"token class-name\">Boolean</span><span class=\"token punctuation\">.</span>FALSE<span class=\"token punctuation\">;</span>\n\n<span class=\"token class-name\">Boolean</span> verdadeiro <span class=\"token operator\">=</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h1 id=\"Conclusao\" style=\"position:relative;\">Conclusão<a href=\"#Conclusao\" aria-label=\"Conclusao permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h1>\n<p>Nesse artigo entendemos um pouco melhor a <strong>Sobrescrita</strong> de métodos e como ela pode fornecer maior flexibilidade na hora do desenvolvimento, também vimos as <strong>Classes Wrappers</strong> e o recurso de <strong>Autoboxing</strong> e <strong>Unboxing</strong> da linguagem <strong>Java</strong>.</p>\n<p>O código deste artigo se encontra no <a href=\"https://github.com/guilhermegarcia86/helloworld\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">GitHub</a></p>\n<p>Visite também o nosso canal no <a href=\"https://www.youtube.com/channel/UCDWmrzFPkkQf5VI_ziZrgvw\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Youtube</a> para mais acompanhar essa série de <strong>Primeiros passos com o Java</strong> e muito mais conteúdos sobre programação.</p>","fields":{"slug":"/java-iniciante-pt5/"},"frontmatter":{"date":"13 de outubro de 2021","description":"POO Sobrecarga, Wrappers e Autoboxing","title":"Primeiros passos com Java V","tags":["Java","Beginner","POO"],"author":"Guilherme Alves","image":{"id":"9b602a1e-7c2e-504d-83b1-31105f9d45da","publicURL":"/static/171041e29915ed36edde06bda29e13b5/java-artigoV.png","childImageSharp":{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAABYlAAAWJQFJUiTwAAAB2UlEQVQ4y4VT2WobQRCca+870gYsexUsg2yDFVAwDggcHL1ZCOzk//+l0t2rWSbO4Ydi5+iurq6eVUZreGiGUjDWwTUdXJzApSlsXsAYgzA2jNd+TVD+YAqiva1bmCSFcRFsVY9F6M4Sqf0LcQg1bShQqnBS045F8lIILRd5h8grVr8HGlHjqEWXJKSQWp/1sNS60WqKE6Xa/GlVqDD0w1kLl+WS6EihKyuYQKV+036Yq0LJcRzLhfoPOC4i5dM+JPWEfNHUNZqmwXIYcHtzg499j+HiQtaLszMMdM77T8slNnd3uFqtMJvNpiKjSp5ywF6WJbbbLY7Ho3y/PT7icDjg82aDL7Tf7Xb4/vSEw/Mz9vs9Hu7vkZHXlhQb76F/MlypbVtR08/novR8sUBPSlmVdEDgfUZvs8hzQf+wg247ydf6jUI+ZH8S8lIGQ+s4iv7pa0LE+fYryvMBsRnzlQ/2E6tJBXvzoesEc1p3pNxaM02SB8E5q8tL/PzxivX1NdlVjISshFvlNrxKPkvIm5QQkcLw/XEHrJzJ1+s1Xl9eZEj+6Qghe1NVlQyFwd7kWYb85FNRFLL2ZykVlz8reDpejAo9sSdlGSV6IiE/gYn4nkVI+yeo4PsL8tg1R1OffBQAAAAASUVORK5CYII=","aspectRatio":1.4096916299559472,"src":"/static/171041e29915ed36edde06bda29e13b5/0823f/java-artigoV.png","srcSet":"/static/171041e29915ed36edde06bda29e13b5/c67b7/java-artigoV.png 320w,\n/static/171041e29915ed36edde06bda29e13b5/d3930/java-artigoV.png 640w,\n/static/171041e29915ed36edde06bda29e13b5/0823f/java-artigoV.png 1280w,\n/static/171041e29915ed36edde06bda29e13b5/b3c49/java-artigoV.png 1745w","sizes":"(max-width: 1280px) 100vw, 1280px"}}}},"timeToRead":6}},"pageContext":{"slug":"/java-iniciante-pt5/","previous":{"fields":{"slug":"/java-iniciante-pt4/"},"frontmatter":{"title":"Primeiros passos com Java IV","date":"04 out, 2021"}},"next":{"fields":{"slug":"/java-iniciante-pt6/"},"frontmatter":{"title":"Primeiros passos com Java VI","date":"26 out, 2021"}}}},"staticQueryHashes":["63159454"]}