자바로 계산기를 만드는 중, 연산자를 받아 어떤 연산자인지 if문을 활용해서 구분하고 결과를 출력하는 로직을 구현하고 있었다.
그래서 익숙하게도 아래처럼 코드를 작성했는데
int result = 0;
if (operator == "+") {
result =add(a,b); //add라는 함수 정의함
}
system.out.println(result); //add라는 함수 정의함
결과가 계속 0으로 나왔다.
분명히 result 변수에 add 함수를 적용해서 값이 바뀌었어야했는데 그러지 않았다.
그 이유가 바로 자바에서 ==와 .equals()의 차이 때문이었다.
기본 데이터 타입(Primitive type) 비교: 값이 같은지 확인참조 타입(Reference type) 비교: 객체의 주소(메모리 위치)가 같은지 확인→ 같은 주소(같은 메모리 공간)를 가리키는지
객체의 내용(값)이 같은지 비교하는 메서드
String, Integer 같은 클래스는 오버라이딩(재정의)되어 있어 내용 비교를 한다.
→ 객체의 내용이 같은지 비교
if (operator.equals("+")) {
CalculatorClass.add(a,b);
}
else if (operator.equals("-"){
CalculatorClass.subtract(a,b);
}
else if (operator.equals("*")){
CalculatorClass.multiply(a,b);
}
else if (operator.equals("/")){
CalculatorClass.divide(a,b);
}
.equals("+")를 사용해서 입력받는 사칙연산 기호를 구분하고 if-else로 처리할 수 있도록 했다.
import java.util.Scanner;
public class Calculator2Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in) ;
boolean system = true;
do {
System.out.print("첫 번째 정수를 입력하세요 : ");
int a = scanner.nextInt();
System.out.print("두 번째 정수를 입력하세요 : ");
int b = scanner.nextInt();
System.out.print("사칙연산 기호를 입력하세요: ");
String operator = scanner.next();
if (operator.equals("+")) {
CalculatorClass.add(a,b);
} else if (operator.equals("-")){
CalculatorClass.subtract(a,b);
} else if (operator.equals("*")) {
CalculatorClass.multiply(a,b);
} else if (operator.equals("/")){
CalculatorClass.divide(a,b);
}
System.out.println("더 계산하시겠습니까? 아무 문자나 입력하세요. (exit 입력 시 종료)");
String ask = scanner.next();
if (ask.equals("exit")){
system = false;
System.out.println("시스템을 종료합니다");
}
}while (system);
}
}
//더하기
static void add(int a, int b){
System.out.println("결과 : "+(a+b));
}
//빼기
static void subtract(int a, int b){
System.out.println("결과 : "+(a-b));
}
//곱하기
static void multiply(int a, int b){
System.out.println("결과 : "+(a*b));
}
//나누기
static void divide(int a, int b) {
if (b == 0) {
System.out.println("수행할 수 없는 연산입니다");
}else {
System.out.println("결과 : "+(double) a/b);
}
}