기억의 DataBase

기본형, 참조형, 배열, Object, String 본문

Java

기본형, 참조형, 배열, Object, String

Zester; 2019. 1. 18. 18:36
기본형, 참조형, 배열

  •  Java에서 객체가 아닌 것들 - 기본형
소문자로 시작
기본형은 값을 가짐 > 값을 저장

boolean - True/False
char - 문자(2byte) 하나, 2byte 양의 정수
int - 4byte 정수
long - 8byte 정수, 10L, 20L
float - 4byte 실수, 10.5f
double - 8byte 실수

  • 객체타입 - 참조형
대문자로 시작
참조형은 값을 참조함 > 인스턴스를 참조(주소 저장 X)

배열
String - 문자열, 부모가 Object
Object - toString( ) > 메소드를 가짐(Object 정보 return)

※ 메소드 오버로딩 - 파라미터로 다양한 값을 받게 작성(사용자 편이 추구)
 > println(Object o) - 파라미터로 다 가능

※ 메소드에 파라미터로 준다는 것은 메모리에 새로운 값으로 복사한다는 것
    메소드가 종료되면 메모리에서 삭제됨(static 메소드는 남아있음)

  • 배열
같은 타입의 변수를 여러개 선언할 때 용이

    int[] array = new int[1000];
    int array2[] = new int[1000];
             
    int[] a, b;
    int c[], d;

    Car[] car = new Car[] {new Car()};
    System.out.println(car.length);

※ foreach + Ctr + Space >> 자동완성

  • Object
Object의 메소드 toString(), equals(), hashCode()는 오버라이딩을 위해 준비된 메소드
> 오버라이딩의 기준은 자식메소드 > 객체를 만드는 사람이 설정

  1. toString()
public class ObjectTest {
       public static void main(String[] args) {
             
             Object obj1 = new Object(); 

             //Object를 파라미터로 넣어주면 내부적으로 toString()을 호출
             //toString()은 객체가 갖고 있는 값을 문자열로 바꿔서 반환
             System.out.println(obj1);
             System.out.println(obj1.toString());
       }
}

  1. equals()

       int wheel = 10;
       
       @Override
       public boolean equals(Object obj) {
             if (this == obj) // 들어온 인자와 this가 같은가
                    return true;
             if (obj == null) // 들어온 인자가 null
                    return false;
             if (getClass() != obj.getClass()) // 들어온 인자와 this의 클래스 정보가 같은가
                    return false;
             Car other = (Car) obj;
             if (wheel != other.wheel) // 인자의 필드값을 비교
                    return false;
             return true;
       }

  1. hashCode()

    @Override
       public int hashCode() {
             final int prime = 31;
             int result = 1;
             result = prime * result + wheel;
             return result;
       }

  • String
String은 불변클래스 :  String이 가지고 있는 모든 메소드는 값을 반환만하고,
                                    자기 자신은 변하지 않음

public class StringTest {
       public static void main(String[] args) {
             
             String str1 = "hello"; // 상수 pool에 들어가기 때문에 같은 값으로
             String str2 = "hello";
             String str3 = new String("hello"); // new를 쓰면 새로운 인스턴스를 생성
             String str4 = new String("hello");
             
             if(str1==str2) { // == : 같은 것을 참조하는가
                    System.out.println("str1==str2");
             }
             
             if(str1.equals(str3)) { // equals : 같은 값을 가진 것인가
                    System.out.println("str1 == str3");
             }
             
             if(str3==str4) { // new를 쓰면 다른 인스턴스
                    System.out.println("str3 == str4");
             }
             
       }
}

문자열과 문자열을 더하는 코드를 쓰면 StringBuffer 인스턴스가 만들어짐
> 반복문 내에서 문자열을 더하면 성능에 많이 저하(서버 프로그램에서 민감)
> StringBuffer, StringBuilder 객체를 사용하는게 좋음

     StringBuffer sb = new StringBuffer();
     sb.append("*");

※ @Override 어노테이션 >> 오타로 인해서 메소드명이 다르거나 하면 오버라이드가 안됨
※ 정규표현식 : String의 가장 깊은 문법
ex) 긴 문자열에서 email이 있는지를 확인


'Java' 카테고리의 다른 글

객체 직렬화  (0) 2019.01.31
I/O(Input / Output)  (0) 2019.01.31
인터페이스  (0) 2019.01.18
상속, 추상클래스  (0) 2019.01.18
접근지정자  (0) 2019.01.17
Comments