메모장

블로그 이미지

동팡

https://github.com/ehdvudee

Integer.ParseInt() vs Integer.valueof()

개발관련/(과거)메모 2017. 5. 8. 15:35

참고

http://stackoverflow.com/questions/7355024/integer-valueof-vs-integer-parseint

http://stackoverflow.com/questions/13933287/which-one-is-faster-integer-valueofstring-string-or-integer-parseintstring-s

https://docs.oracle.com/javase/tutorial/java/data/autoboxing.html


문득 개발하다가 Integer.ParseInt(), Integer.valueof()가 궁금해서 알아봤다.

 Integer.ParseInt()

Integer.class의 ParseInt 메소드

	public static int parseInt(String arg) throws NumberFormatException {
		return parseInt(arg, 10);
	}


Integer 클래스의 parseInt메소드는 String Object를 인자로 받는다.

그리고 내부적으로 parseInt 메소드를 호출한 후(오버로딩) int형(int primitive)으로 리턴한다.


 Integer.valueOf()

Integer.class의 valueOf 메소드

	public static Integer valueOf(String arg, int arg0) throws NumberFormatException {
		return valueOf(parseInt(arg, arg0));
	}

	public static Integer valueOf(String arg) throws NumberFormatException {
		return valueOf(parseInt(arg, 10));
	}

Integer 클래스의 valueOf 메소드는 String Object를 인자로 받는다.

그리고 내부적으로 parseInt 메소드를 호출한 후 래핑된 Integer Object를 반환한다.


결국 사용자가 원하는 타입이 Object인지, primitive 인지 파악 후, 선택적으로 사용하면 된다.

  Autoboxing, Unboxing

 위의 내용에서 래핑이라는 단어가 사용됐다.

정확히 야기하자면 저 상황에서 래핑은 Autoboxing을 뜻하는 것이다.

Autoboxing은 무엇인가? => get convert int(primitive types) to Integer(Object) automatically.

자동으로 int형을 Integer 형으로 컨버팅 해주는 것이다.

그 반대 상황은 Unboxing이라 칭한다.


그럼 예제를 통해 쉽게 이해해보자

List <Integer> li = new ArrayList<>();
for (int i = 1; i < 50; i += 2)
    li.add(i);

[(List <Integer> li = new ArrayList<>(); ) => ArrayList<> <> 이것은 다이아몬드 연산자로, jdk7 이상 부터 지원한다.]


위의 코드는 컴파일이 '성공적으로' 된다. 

아마 초보자( 저 포함)들도 이런 경우를 많이 봤을 것이다. (그러다면 왜 될까? 생각해보면 좋겠다.)


Autoboxing, Unboxing에 개념이 이것이다.

컴파일 타임 즉 컴파일러는 위의 코드를 자동으로 int형을 Integer형으로 래핑한다.(Autoboxing 한다.)

그리고 런타임 코드는 아래와 같이 변한다.

List<integer> li = new ArrayList<>();
for (int i = 1; i < 50; i += 2)
    li.add(Integer.valueOf(i));


컴파일러가 자동으로 Integer.valueOf(i)를 실행하여 바꿨다.


아래는 primitive type과 그에 상응되는 wrapper class이다.



2개의 메소드의 성능을 알아보려 했으나, 관점자체가 다르다 하더라.... 

그러나 autoboxing할 때 new Integer()를 실행하여 객체 생성을 하므로 prmitive type을 리턴받는게 더 빠르지 않을까 생각한다.


저작자표시 비영리

'개발관련 > (과거)메모' 카테고리의 다른 글

스프링 빈과 Thread-Safe  (0) 2019.10.01
mybatis- "IllegalArgumentException: invalid comparison: java.util.Date and java.lang.String  (2) 2019.06.28
자바 Reflect Class, Method  (0) 2017.04.29
Log4j 2 Manual - Introduction  (0) 2017.04.29
자바 웹 서버(톰켓, 카탈리나, 재스퍼)  (0) 2017.04.03
Posted by 동팡
블로그 이미지

https://github.com/ehdvudee

by 동팡

공지사항

    최근...

  • 포스트
  • 댓글
  • 트랙백
  • 더 보기

태그

  • 개발자 책리뷰
  • 글쓰기 가이드
  • 경력 채용
  • Thread-safe
  • java
  • Secret Sharing
  • 간단리뷰
  • 개발자 이직
  • LoRaWA
  • 네이버 비즈니스 플랫폼
  • Hashicorp
  • 이직 느낀점
  • 개발자 준비
  • vault 개요
  • 자바
  • vault
  • 네이버 클라우드 이직
  • 하시콥 볼트
  • Shamir Secret Sharing
  • 네이버 클라우드 개발자 면접
  • 개발자 글쓰기 책
  • 네이버 클라우드
  • Spring
  • vault tutorial
  • 이직 정보 공유
  • What is Vault
  • 볼트란
  • 책리뷰
  • Secret Sharing 이론
  • NBP

글 보관함

«   2025/05   »
일 월 화 수 목 금 토
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

링크

카테고리

메모장 (70)
개발관련 (68)
삽질 (26)
(과거)메모 (27)
강의 (0)
회고 (9)
책 리뷰 (6)
블로그 관리 글(비공개) (0)
일상 (2)
기타 (0)
책 리뷰 (1)
회고 (0)

카운터

Total
Today
Yesterday
방명록 : 관리자 : 글쓰기
동팡's Blog is powered by daumkakao
Skin info material T Mark3 by 뭐하라
favicon

메모장

https://github.com/ehdvudee

  • 태그
  • 링크 추가
  • 방명록

관리자 메뉴

  • 관리자 모드
  • 글쓰기
  • 메모장 (70)
    • 개발관련 (68)
      • 삽질 (26)
      • (과거)메모 (27)
      • 강의 (0)
      • 회고 (9)
      • 책 리뷰 (6)
    • 블로그 관리 글(비공개) (0)
    • 일상 (2)
      • 기타 (0)
      • 책 리뷰 (1)
      • 회고 (0)

카테고리

PC화면 보기 티스토리 Daum

티스토리툴바