Olá pessoal, td bem?
Dúvida que me apareceu depois de ver alguns trabalhos de colegas…
Qual a diferença de long para Long??? E qual o mais recomendado?
Abs.
Olá pessoal, td bem?
Dúvida que me apareceu depois de ver alguns trabalhos de colegas…
Qual a diferença de long para Long??? E qual o mais recomendado?
Abs.
depende o q vc vai usar se foe representar um dado seria long ou se for representar um classe seria Long
long = dado primitivo para indentificar um dado de 64 bit
Long = seria a classe Wrapper ( que encapsula valor de um objeto)
vlw
weliton jose
[quote=welitonjose]depende o q vc vai usar se foe representar um dado seria long ou se for representar um classe seria Long
long = dado primitivo para indentificar um dado de 64 bit
Long = seria a classe Wrapper ( que encapsula valor de um objeto)
vlw
weliton jose[/quote]
blz, mas no caso prático de vc fazer:
private Long cod_chs;
//ou
private long cod_chs;
qual seria a diferença??
[quote=Kleber-rr][quote=welitonjose]depende o q vc vai usar se foe representar um dado seria long ou se for representar um classe seria Long
long = dado primitivo para indentificar um dado de 64 bit
Long = seria a classe Wrapper ( que encapsula valor de um objeto)
vlw
weliton jose[/quote]
blz, mas no caso prático de vc fazer:
private Long cod_chs;
//ou
private long cod_chs;
qual seria a diferença??[/quote]
Trabalhar com long é mais rápido, pois ele é primitivo, ou seja baixo nivel. Existe o problema dele sempre comçar inicializado com por exemplo 0L.
o Wrapper Long, é mais lendo, porém pode ser definido quando o GC vai coletar a variavel setando ela pra null.
Eu adoto sempre o Long. Mas no fim eles são a mesma coisa. Não existem grandes diferenças quando a isso.
Long (ou java.lang.Long) é um objeto e “long” um tipo primitivo.
Evite usar “Long” a menos que estritamente necessário, já que é preciso um monte de operações intermediárias para fazer cálculos com “Long” em vez de “long”.
O mais recomendado é usar long, minúsculo. Inclusive, nos artigos de AutoBoxing da sun, há um alerta bem explícito sobre a baixa performance do Long.
Primeiro, é bom entender a diferença. long é um tipo primitivo, e mutável. O java também só faz calculos usando o long, não o Long. Finalmente, uma variável local long será gerada no stack, que é um local de rapidíssimo acesso, enquanto um tipo Long será sempre gerado no heap.
Você pode alterar o valor da variável tranquilamente. Uma operação como essa:
long x = 10;
long y = 2;
x += y+2;
Gera pouquíssimas instruções de processador.
A classe Long é uma classe imutável. Simplesmente uma classe que contém um long dentro. De forma rudimentar, algo mais ou menos assim:
public class Long extends Number {
private long value;
public Long(long value) { this.value = value; }
public long longValue() { return value; }
}
Note que não existem setters. Portanto, isso aqui:
Long x = 10;
Long y = 2;
x += y+2;
Fica traduzido, após a compilação para isso aqui:
Long x = new Long(10);
Long y = new Long(2);
x = new Long(x.getValue() + new Long(y.getValue() + 2).getValue());
Antes do Java 5, era aquele código que o programador deveria escrever.
Note que nesse exemplo, foram instanciados 4 objetos. Expressões mais complexas podem gerar resultados ainda mais escabrosos. Por isso, o Long não é recomendado em nenhuma computação ligeiramente mais matemática.
Quando você deve usar Long? Quando não puder escapar dele:
a) Em classes que exijam como parâmetro de entrada um objeto (List, Set, Map, etc);
b) Quando você precisa da representação do valor null (embora muitas vezes isso possa ser contornado com um valor que representa o null, como -1);
Essa é a questão pessoal… estou desenvolvendo uma aplicação usando Long ao invés de long. Só que cheguei em determinada etapa da minha aplicação, e estou tendo problemas em pegar o valor de uma HtmlSelectOneMenu, que apesar de existir, a aplicação a reconhece como null… Quem puder dar uma olhada e comentar entre no link:
http://www.guj.com.br/posts/list/45/131782.java#805192
Agradeço.
[quote]Trabalhar com long é mais rápido, pois ele é primitivo, ou seja baixo nivel. Existe o problema dele sempre comçar inicializado com por exemplo 0L.
o Wrapper Long, é mais lendo, porém pode ser definido quando o GC vai coletar a variavel setando ela pra null.
Eu adoto sempre o Long. Mas no fim eles são a mesma coisa. Não existem grandes diferenças quando a isso.
[/quote]
long para dados e alguritimos de pequeno porte vc quiz disser
Se você já trabalhou com C#, o Long seria mais ou menos o equivalente ao “long?” que existe no C#. O “long?” é algo que pode assumir um valor numérico, ou então o valor “null”.
// C#
long? x = null;
x = 10000;
java.lang.Long x = null;
x = 10000; // é a mesma coisa que "x = Long.valueOf (10000)", que equivale a "x = new Long (10000)"
Só um adendo. O java também não é tão bobo e não dá new o tempo todo. Ao invés de new Long, ele também usa o método valueOf. Omiti esse detalhe pois achei que ele somava pouco à explicação e daquela forma ficava mais didático.
O método valueOf simplesmente testa se o Long está num cache, e o retorna caso esteja.
public Long valueOf(long value) {
return cache.contains(value) ? cache.get(value) : new Long(value);
}
O cache não é ampliado caso o Long não esteja lá. Isso evita que longs no invalo de -127 até 128 sejam constantemente recriados.
E esse cache está presente em todos os wrappers. Em futuras versões do java, o tamanho desse cache será configurável (isso se já não for).
Vale lembrar, também, que quando se usa web services, por exemplo, costuma dar m*%& usar long (minúsculo).