Goal
- StringUtils이 제공하는 빈 값과 Null체크를 하는 메소드의 각 차이점을 알아본다
- == 와 equals()의 차이를 알아본다
- String.valueOf()메소드에 대해 알아본다
기존 코드에서의 빈 값 및 null 체크
// 계약정보를 리턴받은 contMap
if("".equals(contMap.get("fctsVol").toString()) || StringUtils.isEmpty((contMap.get("fctsVol").toString())))
- 메소드가 제공하는 특징을 정확히 이해하지 않았음. isEmpty는 Null 및 빈 값 모두 체크를 하므로 "".equals() 비교는 없어도 됨
isEmpty()
public static boolean isEmpty(java.lang.String val)
StringUtil.isEmpty(null) = true
StringUtil.isEmpty("") = true
StringUtil.isEmpty(" ") = false
StringUtil.isEmpty("bob") = false
StringUtil.isEmpty(" bob ") = false
- 문자열이 비어 있는지 확인하며, 비어 있음은 null 또는 빈 문자열로 정의
- null 또는 "" 이면 true, 그렇지 않으면 false 리턴
isBlank()
public static boolean isBlank(java.lang.String val)
StringUtil.isBlank(null) = true
StringUtil.isBlank("") = true
StringUtil.isBlank(" ") = true
StringUtil.isBlank("bob") = false
StringUtil.isBlank(" bob ") = false
- isEmpty()와 유사하며 공백인지를 추가로 확인
- null , "" 또는 " " 이면 true, 그렇지 않으면 false 리턴
= = 동등 비교 vs eqauls()
public static void main(String[] args) {
String txt1 = "";
String txt2 = "";
String txt3 = new String();
if("" == txt1) {
System.out.println("== 비교 1");
}
if(txt1 == txt2) {
System.out.println("== 비교 2");
}
if(txt1 == txt3) {
System.out.println("== 비교 3");
}
if("".equals(txt1)) {
System.out.println("equals 비교 1");
}
if(txt1.equals(txt2)) {
System.out.println("equals 비교 2");
}
if(txt1.equals(txt3)) {
System.out.println("equals 비교 3");
}
}
결과
== 비교 1
== 비교 2
equals 비교 1
equals 비교 2
equals 비교 3
String이 Heap영역에 저장되는 방식
- 문자열은 Java에서 변경할 수 없고, new 키워드 없이 두 개 이상의 객체가 생성되면 두 객체 모두 동일한 값을 참조
- 따라서, s3는 s1,s2 와는 다른 객체
- '==' 연산자는 해당 문자열의 주소를 비교
- equals()는 값을 비교
- 기본자료형은 == 로 비교
String.valueOf
public static void main(String[] args) {
String name1 = null;
if(StringUtils.isEmpty(name1)) {
System.out.println("1 :: StringUtils.isEmpty");
}
if(StringUtils.isBlank(name1)) {
System.out.println("2 :: StringUtils.isBlank");
}
// System.out.println(name1.getClass().getName());
if("null".equals(name1)) {
System.out.println("3 :: String null.equals");
}
if(null == name1) {
System.out.println("4 :: null == name1");
}
System.out.println("5 :: "+String.valueOf(name1));
System.out.println("6 :: "+String.valueOf(name1).getClass().getName());
if("null".equals(name1)) {
System.out.println("6 :: String null.equals");
}
if(null == name1) {
System.out.println("7 :: null == name1");
}
String name1valueof = String.valueOf(name1);
if("null".equals(name1valueof)) {
System.out.println("8 :: String null.equals");
}
if(null == name1valueof) {
System.out.println("9 :: null == name1");
}
}
결과
1 :: StringUtils.isEmpty
2 :: StringUtils.isBlank
4 :: null == name1
5 :: null
6 :: java.lang.String
7 :: null == name1
8 :: String null.equals
- 3 :: 의 경우, "null" 문자열이 아니므로 출력 X
- // System.out.println(name1.getClass().getName());의 경우 name1이 null이므로 NPE이가 발생하기 때문에 주석처리
- String클래스에서 제공하는 valueOf()메소드의 파라미터의 결과를 String으로 리턴한다
- null의 경우 "null"인 문자열로 리턴, 그렇기 때문에 "null".euqals()가 true
'JAVA > about java' 카테고리의 다른 글
[ArrayList] ArrayList / Array vs ArrayList / 자바 버전 별 차이점 (0) | 2023.04.25 |
---|---|
[String] String 클래스 (0) | 2023.04.23 |
[Interface, abstract, enum] 인터페이스, 추상클래스, enum / 예외처리 (0) | 2023.04.19 |
[JVM] JVM 메모리모델 (0) | 2023.04.18 |
[Muatable and Immutable] 가변 객체와 불변 객체 (0) | 2023.04.17 |