Java) Java 기초 복습(2) Object,String,Wrapper class
[클래스]
1. Java. lang 패키지
-> java.lang 패키지는 Import없이 사용가능한 기본이되는 가장 중요한 패키지
1)Object 클래스
-> 모든 클래스의 최상의 클래스(java.lang.Object 클래스)
-> 모든 클래스는 Object 클래스에서 상속 받고, Object 클래스의 메서드 사용 가능
-> Object 클래스 메서드 종류
-> toString() 메서드 :객체 자신의 정보를 문자열로 반환(클래스 이름과 해시값 나옴->함수 재정의하여 의미있는 값 나오도록)
@Override
public String toString() {
return super.toString();
//return "나이는 :" + age; 처럼 나이가 나오도록 함수 재정의
}
-> String 클래스의 toString() = String 인스턴스가 갖고 있는 문자열 반환하도록 오버라이딩 되어 있다.
-> equals() 메서드 : equals(Object obj) 객체 자신과 객체 obj가 같은 객체인지 판단
-> *==과 같이 equals()연산도 내부적으로 주소값을 비교 But, String클래스에서는 equals()를 재정의해 내용을 비교한다.
public boolean equals(Object obj){
//매개변수 obj가 Student클래스면 자신의 이름과 비교
if(!(obj instanceof Student)){
return false;
}
if(Name.equals(((Student)obj).Name)){
return true;
}
else
{return false;}
-> hashCode() 메서드 : 객체 자신의 해시코드를 반환 -> 두 객체가 동일 객체인지 비교
-> 서로 다른 String 객체도 문자열이 같으면 hashCode 같다.
-> clone() 메서드 : 객체 자신의 복사본(새로운 인스턴스) 반환 --> 오버라이딩 해서 사용
-> Object 메소드가 아니라 Cloneable 인터페이스의 추상메소드 따라서, implements Cloneable 인터페이스 구현 필요
->예외처리 필수
try{
return (Member) super.clone();
} catch(CloneNotSupportedException e) {
return null;
}
2)String 클래스
->한번 생성된 string값은 불변. 따라서 두 개 문자열 연결 -> 새로운 인스턴스를 생성하는 것
메소드 | 의미 |
---|---|
int length() | 문자열의 길이를 반환 |
char charAt(int i) | 문자열에서 i번째 문자를 반환 |
byte[] getBytes() | 현재의 문자열을 바이트 배열로 |
boolean equals(Object str) | 현재의 문자열과 str로 지정된 문자열 비교 |
boolean equalsIgnoreCase(String str) | 현재의 문자열과 str로 지정된 문자열 비교 (대소문자 무시) |
int compareTo(String str) | 두 개의 문자열을 비교하여 결과를 정수로 반환 |
String trim() | 문자열의 앞 뒤 공백을 제거 |
static String valueOf(double num) | num을 문자열로 변환하여 반환 |
staitc String valueOf(char chars[]) | 문자 배열을 문자열로 변환하여 반환 |
String toLowerCase() / String toUpperCase() | 문자열을 모두 소문자/대문자로 변환하여 반환 |
String substring(int startIndex) | startIndex로부터 시작하는 부분 문자열을 반환 |
String substring(int startIndex, int endIndex) | startIndex와 endIndex 사이의 부분 문자열을 반환 |
String replace(char original, char replacement) | original로 지정된 문자를 replacement로 지정된 문자로 대치 |
-> StringBuffer & StringBuilder 클래스 -> 기존의 String 클래스 한계 극복 위해서 ```java public final class StringBuffer implements java.io.Serializable { private char[] value; ... } ```
-> String클래스는 Immutable(불변)이므로 인스턴스를 생성할 때 지정된 문자열을 변경할 수 없지만, StringBuffer클래스는 가능하다.
-> 내부적으로 문자열 편집을 위한 buffer를 가지고 있으며, StringBuffer 인스턴스를 생성할 때 그 크기를 지정할 수 있다.
-> buffer의 크기를 지정하지 않으면 16개의 문자를 저장할 수 있는 크기의 버퍼 생성
1) StringBuilder 클래스 : 문자열 변경 시 추가 메모리 생성 없이 기존 문자열 확장하는 클래스 but, 멀티쓰레드 환경 X
class Main{
public static void main(String[] args) throws Exception{
StringBuilder sb = new StringBuilder("test"); //StringBuilder sb 선언
System.out.println(sb +" "+ System.identityHashCode(sb)); //문자열sb가 할당된 메모리 주소 출력
sb.append("2") //문자열 추가
sb.append("3")
System.out.println(sb +" "+ System.identityHashCode(sb)); //문자열sb가 할당된 메모리 주소 출력
String temp= sb.toString(); //StringBuilder 클래스를 String 클래스로 변환
}}
결과
test 4242
test23 4242 -> 문자열이 변경되어도 문자열 주소가 변경되지 않았다.
2)StringBuffer 클래스 : 멀티쓰레드 환경에서도 사용 가능
->String 클래스 객체 선언 방법
1) 스트링 리터럴로 직접 넣기
String str1 ="hi there"; -> 하나의 데이터 공유 따라서, 변경 불가 String str2 ="hi there";
2) new + 생성자
```java
String str3 = new String("hi there");
String str4 = new String("hi there");
-> 각자 자신의 메모리 공간을 할당 받아 사용
```
Wrapper 클래스
-> 프리미티브(기본) 타입 변 데이터를 객체로 표현하기 위해 포장해 주는 클래스 (포장=boxing)
Primitive Data Type (기본 타입) | Wrapper Class |
---|---|
char | Character |
byte | Byte |
short | Short |
int | Integer |
long | Long |
float | Float |
double | Double |
boolean | Boolean |
->wrapper class 인스턴스에 저장된 값을 변경할 수 없다. (산술 연산을 위한 클래스가 아니기 때문이다.)
->Boxing : 기본 타입의 데이터를 -> wrapper class의 인스턴스로 변환하는 과정
Integer num = new Integer(1);// Integer num = 1; auto boxing
UnBoxing : wrapper class의 인스턴스에 저장된 값을 -> 기본 타입의 데이터로 꺼내는 과정
int n = num.intValue();// int n= num; auto unboxing
->Wrapper Class 비교연산
-wrapper class의 비교연산은 AutoUnBoxing에 가능하다.
-인스턴스에 저장된 값에 대한 동등 여부 판단은 동등 연산자 ==으로 불가능하다. -> wrapper class 객체의 주소값을 비교한다.
-equals()메소드를 통해 가능하다.
Integer num = new Integer(10); //래퍼 클래스1
Integer num2 = new Integer(10); //래퍼 클래스2
int i = 10; //기본타입
System.out.println("래퍼클래스 == 기본타입 : "+(num == i)); //true
System.out.println("래퍼클래스.equals(기본타입) : "+num.equals(i)); //true
System.out.println("래퍼클래스 == 래퍼클래스 : "+(num == num2)); //false 객체의 주소값 비교하므로
System.out.println("래퍼클래스.equals(래퍼클래스) : "+num.equals(num2)); //true
Parse 메소드, valueOf 메소드
-Integer.parseInt(arg) = 문자열을 분석하여 리턴 타입이 기본 타입으로
ex) Boolean.parseBoolean("true") =true // 대소문자 상관 없이 true 문자열만 true 나머지는 false
-Integer.valueOf(arg) = 문자열을 분석하여 리턴 타입이 Wrapper 클래스 타입으로
4)Class 클래스
->getClass() =class 객체 얻기 , 해당 클래스로 객체를 생성하는 경우에 사용 가능
Class clasis = obj.getClass();
->forName() = 클래스 전체 이름을 파라미터로 받고 class 객체 얻기 . 객체 생성 전 직접 class 객처 얻을 수 있다.
//Class.forName() 메소드는 클래스 찾지 못하여 경우 대비 예외 처리 필요
try {
Class clasis = Class.forName(String className);
} catch(ClassNotFoundException e) {}
Author And Source
이 문제에 관하여(Java) Java 기초 복습(2) Object,String,Wrapper class), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ninikim/Java-Java-기초-복습2-ObjectStringWrapper-class저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)