비교 연산자와 형변환

5BRack·2022년 6월 29일

자바란?

목록 보기
5/42

연산자

  • 특정한 작업을 하기 위해서 사용하는 기호

산술연산자

  • 산술에 필요한 연산자
    • ,* ,/ ,%
System.out.println(1+2); //더하기
System.out.println(1*2); //곱하기
System.out.println(1/2); //나누기
System.out.println(1%2); //나머지

//변수를 이용해 연산 가능
int a = 1;
int b = 2;
System.out.println(a+b); //더하기  결과값 : 3 

비교 연산자

  • 자바에서는 '=' 와 '=='의 의미가 다르다.
  • '='의 의미는 우측항을 좌측항으로 대입한다는 의미이다.
int a = 10; //10을 a에 대입하겠다.
  • '=='의 의미는 스택메모리값을 비교한다 라는 의미이다.
    • 스택메모리값을 비교시에는 기본연산자와 참조연산자는 결과가 다르다.
int a = 10;
int b = 8;
int c = 10;

System.out.println(a==b) // 다르다.
System.out.println(a==c) // 같다.

// 기본 자료형은 스택 메모리에서 실제 데이터를 
// 비교하기 때문에 이와 같은 결과값을 가진다.

String str1 = new String("안녕");
String str2 = new String("안녕");

System.out.println(str1==str2) // 다르다.
// 참조 자료형은 스택 메모리에서 실제 데이터를 
// 비교하는게 아닌 실제 데이터의 번지수를 비교하기 
// 때문에 이와 같은 결과값을 가진다.

new 의 의미

힙메모리에 새로운 객체를 생성한다.
이 객체의 변수는 힙메모리의 번지수값을 가진다.



형변환

  • 데이터의 타입을 변경하는 것

자동 형변환

  • 자바는 형변환을 자동으로 처리해 주는데 이런한 전환 작업을 자동형 변환이라 부른다.

  • 자동 형변환의 원칙 - 표현범위가 좁은 데이터 타입에서 넓은 데이터 타입으로 변환만 허용된다는 것이다.

byte > short > int > long > float > double

int a = 1;
        double b = 3.5;
        
        double c = a + b; //a가 double로 자동 형변환
        System.out.println(c);

명시적 형변환

  • 자동 형 변환이 적용되지 않는 경우에는 수동으로 형변환을 해야 한다. 이를 묵시적 형변환이라 한다.
  • (데이터타입)데이터값
int a = 1;
        double b = 3.5;
        
        double c = (int) a + (int) b;
        double d = (int) a + (double) b;
        double e = (double) a + (double) b;
        System.out.println(c + ", " + d + ", " + e);

업캐스팅(UpCasting)

  • 자식 클래스가 부모 클래스 타입으로 캐스팅 되는 것을 뜻한다.
  • 작은 자료형을 큰 자료형에 담으면 개발자가 타입 변환 코드를 넣어 주지 않더라도 컴파일러가 자동으로 타입변환을 실행하는 데 이를 업캐스팅이라 한다.
Object object = new 클래스();    
Object object = (Object)new 클래스();     //모든 클래스는 object의 상속을 받으므로 자동타입을 실행한다.

다운 캐스팅(DownCasting)

  • 부모 클래스가 자식 클래스 타입으로 캐스팅되는 것을 뜻한다.
  • 큰 자료형을 작은 자료형에 대입하는 행위를 다운캐스팅 이라고 한다.
  • 강제형변환이 일어나며, 다운 캐스팅한 타입에서 선언된 모든 필드와 메서드에 접근이 가능하다.
  • 하위 클래스에서 추가 메서드는 접근 불가능하다.

예제

  • 상위 클래스 : Person 클래스를 상속받는 Student 클래스 존재
public class Person{
	public String toString(){
    	return "Person 입니다.";
}

public class Student extends Person{
	public String toString(){
    	return "Student 입니다.";
}

public class Main{
	Person person = new Person();
	Studnet student = (Student)person;  // 다운캐스팅은 명시적형변환이 필요하다.
   	System.out.println(person); //  결과 : Student 입니다.
}

0개의 댓글