Long.valueOf (String s) daje Long (obiekt), a Long.valueOf (String s) .longValue () daje long (pierwotny).
Champ
27
publicclassStringToLong{publicstaticvoid main (String[] args){// String s = "fred"; // do this if you want an exceptionString s ="100";try{long l =Long.parseLong(s);System.out.println("long l = "+ l);}catch(NumberFormatException nfe){System.out.println("NumberFormatException: "+ nfe.getMessage());}}}
Najlepsze podejście Long.valueOf(str)polega na Long.valueOf(long)tym, że polega na tym, który wykorzystuje wewnętrzną pamięć podręczną, co czyni ją bardziej wydajną, ponieważ w razie potrzeby ponownie użyje buforowanych instancji Longprzechodzenia od -128do 127uwzględnionego.
Zwraca Longinstancję reprezentującą określoną długą wartość. Jeśli nowa instancja typu Long nie jest wymagana, metoda ta powinna być ogólnie stosowana zamiast konstruktora Long(long), ponieważ metoda ta prawdopodobnie zapewni znacznie lepszą wydajność przestrzeni i czasu dzięki buforowaniu często żądanych wartości. Należy zauważyć, że w przeciwieństwie do odpowiedniej metody w klasie Integer, ta metoda nie jest wymagana do buforowania wartości w określonym zakresie.
Dzięki automatycznemu rozpakowaniu pozwalającemu konwertować instancję klasy opakowania na odpowiadający jej typ pierwotny, kod wyglądałby następująco:
long val =Long.valueOf(str);
Pamiętaj, że poprzedni kod nadal może wyrzucić a, NumberFormatExceptionjeśli podany Stringnie pasuje do podpisanego long.
Ogólnie rzecz biorąc, jest to dobra praktyka, aby użyć staticmetody fabryki valueOf(str)z klasy otoki jak Integer, Boolean, Long, ..., ponieważ większość z nich ponowne przypadki, gdy jest to możliwe, co czyni je potencjalnie bardziej efektywny w perspektywie zużycie pamięci niż odpowiednich parsemetod i konstruktorów .
Fragment Effective JavaItem 1 napisany przez Joshua Blocha :
Często można uniknąć tworzenia niepotrzebnych obiektów, stosując statyczne metody fabryczne (pozycja 1) zamiast konstruktorów w niezmiennych klasach, które zapewniają oba. Na przykład statyczna metoda fabryczna
Boolean.valueOf(String)jest prawie zawsze lepsza niż konstruktor Boolean(String). Konstruktor tworzy nowy obiekt za każdym razem, gdy jest wywoływany, podczas gdy statyczna metoda fabryczna nigdy nie jest do tego wymagana i nie będzie w praktyce.
Warto zauważyć, że auto-rozpakowywanie jest „wyłączane” przez kompilator do, w przypadku long -> Long, Long.valueOf (primitiveLong). Tak Long number = Long.valueOf("123"), Long number = Long.parseLong("123")a Long number = Long.valueOf(Long.parseString("123")wszystko kończy się robi prawie to samo. To, na co chcesz uważać, to nie wywoływać konstruktorów klas prymitywnych w pudełkach - może to być marnotrawstwem. Więc nie piszLong number = new Long(parseLong("123"))
Ian Robertson
4
Istnieje sposób przekonwertowania ciągu na liczbę całkowitą :
1)
long l =Long.parseLong("200");
2)
String numberAsString ="1234";long number =Long.valueOf(numberAsString).longValue();
3)
String numberAsString ="1234";Long longObject =newLong(numberAsString);long number = longObject.longValue();
Możemy skrócić do:
String numberAsString ="1234";long number =newLong(numberAsString).longValue();
Lub tylko
long number =newLong("1234").longValue();
4) Używając formatu Decemal:
String numberAsString ="1234";DecimalFormat decimalFormat =newDecimalFormat("#");try{long number = decimalFormat.parse(numberAsString).longValue();System.out.println("The number is: "+ number);}catch(ParseException e){System.out.println(numberAsString +" is not a valid number.");}
Jeśli używasz mapy bez ogólnego, musisz przekonwertować wartość na ciąg, a następnie spróbować przekonwertować na długi. Poniżej znajduje się przykładowy kod
Map map =newHashMap();
map.put("name","John");
map.put("time","9648512236521");
map.put("age","25");long time =Long.valueOf((String)map.get("time")).longValue();int age =Integer.valueOf((String) map.get("aget")).intValue();System.out.println(time);System.out.println(age);
Odpowiedzi:
Posługiwać się
Long.parseLong()
źródło
Aby przekonwertować ciąg znaków na długi (obiekt), użyj
Long.valueOf(String s).longValue();
Zobacz link
źródło
java.lang.Long
źródło
Long.valueOf (String s) - oczywiście należy zachować ostrożność, aby zabezpieczyć się przed liczbami, jeśli jest to możliwe w kodzie.
źródło
Najlepsze podejście
Long.valueOf(str)
polega naLong.valueOf(long)
tym, że polega na tym, który wykorzystuje wewnętrzną pamięć podręczną, co czyni ją bardziej wydajną, ponieważ w razie potrzeby ponownie użyje buforowanych instancjiLong
przechodzenia od-128
do127
uwzględnionego.Dzięki automatycznemu rozpakowaniu pozwalającemu konwertować instancję klasy opakowania na odpowiadający jej typ pierwotny, kod wyglądałby następująco:
Pamiętaj, że poprzedni kod nadal może wyrzucić a,
NumberFormatException
jeśli podanyString
nie pasuje do podpisanegolong
.Ogólnie rzecz biorąc, jest to dobra praktyka, aby użyć
static
metody fabrykivalueOf(str)
z klasy otoki jakInteger
,Boolean
,Long
, ..., ponieważ większość z nich ponowne przypadki, gdy jest to możliwe, co czyni je potencjalnie bardziej efektywny w perspektywie zużycie pamięci niż odpowiednichparse
metod i konstruktorów .Fragment Effective Java
Item 1
napisany przez Joshua Blocha :źródło
Long number = Long.valueOf("123")
,Long number = Long.parseLong("123")
aLong number = Long.valueOf(Long.parseString("123")
wszystko kończy się robi prawie to samo. To, na co chcesz uważać, to nie wywoływać konstruktorów klas prymitywnych w pudełkach - może to być marnotrawstwem. Więc nie piszLong number = new Long(parseLong("123"))
Istnieje sposób przekonwertowania ciągu na liczbę całkowitą :
1)
2)
3)
Możemy skrócić do:
Lub tylko
4) Używając formatu Decemal:
źródło
To dość proste, użyj
Long.valueOf(String s);
Na przykład:
Jesteś skończony!!!
źródło
Dla tych, którzy przeszli na Kotlin, skorzystaj z
string.toLong()
That will call
Long.parseLong(string)
under the hoodźródło
Jeśli używasz mapy bez ogólnego, musisz przekonwertować wartość na ciąg, a następnie spróbować przekonwertować na długi. Poniżej znajduje się przykładowy kod
źródło