String.contains() with empty String, return truejava 에서 String.contains() 를 사용할 때 내가 발생했던 이슈에 대해 다뤄보려한다.아래의 코드를 보자.String myString1="foo"; String myString2=""; if(myString1.contains(myString2)){ System.out.println("Am here"); } else { System.out.println("Am not here"); }foo 가 "" ( empty string ) 을 포함하냐는 것인데, 언뜻 보면 false 로 "Am not here" 가 실행될 것 같지만컴파일 해보면 "Am here" 가 출력된다.그 이유를 찾아보니 모든 문자열의 시작과 끝..
JDK 6 이후, Timezone.setDefault() Timezone.setDefault(Timzone timezone) 은 메소드 명에서 유추할 수 있듯이 기본 Timezone 값을 설정하는 메소드이다.Timezone.getDefault() // 기본 Timezone 값 가져오기먼저 핵심부터 이야기하면, JDK 6 이전에는 defaultTimzone 이 스레드 로컬 변수에 저장되었다.하지만 JDK 6 이후로는 defaultTimezone 이 VM 전체를 변경한다고 한다.내 경우에는 JDK 6 이전의 형태로만 알고 있었기 때문에, Timezone 설정을 아래와 같이, 별도의 시간 관련 메소드 내에서 Timezone.setDefault(Timzone timezone) 을 사용하여 Timezone 설정을..
Type Safety : unchecked 말 그대로 type 의 안정성을 보장할 수 없을 때 이 경고가 발생한다. 내 경우에는 intent 로 1ArrayListcs 이와 같은 데이터를 넘겨주어 전달받은 Activity 에서 1ArrayList persons = (ArrayList) getIntent().getSerializableExtra("persons");cs 다음과 같이 type cast 를 했을 때 해당 경고가 발생했다. Person 은 Serializable 을 implements 한 class 이다. 일반적으로 Java 컴파일러는 실행되는 모든 시점에서 각 변수의 유형을 알고있다. 호환되지 않는 유형으로 작동하면 프로그램이 컴파일되지 않기에 해당 경고를 보여준다. 만약 지정한 형식의 개체만..
:: ( 더블콜론 ) ? Java8 에서 추가된 메소드 참조 ( Method Reference ) 연산자이다 메소드 참조는 람다 식과 동일한 처리 방법을 갖는 표현식이지만 람다 본문을 제공하는 대신, 이름으로 기존 메소드를 참조한다 1234567List list = Arrays.asList("a1", "b1", "a2", "b2"); System.out.println(" -- Using Lamda Functions --"); list.stream().map(s -> s.toUpperCase()).forEach(s -> System.out.println(s)); System.out.println(" -- Using Method Reference --");list.stream().map(String::toU..
Iterator ( 반복자 ) ? 자바의 컬렉션 프레임워크는 컬렉션에 저장된 요소를 읽어오는 방법을 Iterator 인터페이스로 표준화하고 있다 Collection 인터페이스에서는 Iterator 인터페이스를 구현한 클래스의 인스턴스를 반환하는 iterator() 메소드를 정의하여 각 요소에 접근하도록 하고 있다 Set, List 등은 Collection 을 상속 받고 Collection 이 Iterable 을 상속 받고 있다 따라서 Collection 인터페이스를 상속받는 List 와 Set 인터페이스에서도 iterator() 메소드를 사용할 수 있다. Map 은 Set 이나 List 와 달리 Key-Value 의 구조이다Key 에 대한 Iterator 인지 Value 에 대한 Iterator 인지 구..
parseInt() static 이므로 Integer 생성 안 하고 parameter만 넣어주면메소드를 수행할 수 있다. string형 객체에서 int형 값을 뽑아내는 메소드이다. 문자형을 정수형으로 만든다 int i = Integer.parseInt(str); intValue() static이 아니며 Integer 객체에서 int형 값을 뽑아내는 메소드이다 Integer는 (int Value와 String Value) 두 가지가 있다. int i = Integer.valueOf(str).intValue();Integer i = new Integer(150);i.intValue();
문자열 자르기, replace() 메소드 구분자(delimiter)를 이용하여 문자열 자르기 StringTokenizer 클래스 생성자에 단 한문자 구분자만 사용하여 토큰으로 분리한다여러개의 구분자는 사용 가능 Scanner 클래스 useDelimiter() 메소드로 패턴 또는 문자열 구분자를 사용하여 분리한다 String 클래스 split() 메소드로 패턴 또는 문자열 구분자를 사용하여 분리하며, 빈 문자열도 토큰으로 인식한다 1234567891011121314151617181920212223242526272829303132String data = "100,200,,,300"; System.out.println("StringTokenizer...");StringTokenizer st = new Stri..
String new 에 의한 생성이 아닐 때 초기 컴파일러 분석단계에서 literal 처리에 의해 최적화가 될 수 있기 때문에 오히려 빠른 결과를 보여줄 때가 있다 StringBuffer, StringBuilder 초기에 생성할 때 Buffer Size를 주도록 구성되며이에 의한 생성, 확장 오버로드가 걸리기 때문에 의외로 Buffer Size를 잘못 지정할 경우 성능이 떨어질 가능성도 있다 단순 성능만 보면, 연산이 많은 경우(정확한것은 아님) String < StringBuffer