728x90

 

 

 

 

if문 회복시에 로그인 성공의 인자를 넣어줘도 실패가 뜬다

뭔가 문제일까

728x90
반응형
728x90

 

JAVA 제어문 - 5. == vs equals

== equals 차이점 알아볼

 

 

자바의 데이터타입 두가지

구분하는 이유 : 기본형(primitive) 아닌 것을 자바가 차이를 두기 때문

 

 

1.primitive (원시 데이터타입)

boolean, int, double, short, long, float, char

 

2.non primitive

String, Array, Date, File…

 

 

자바가 타입을 어떻게 차별하고 뭐가 다른지를 알아보자

 

같은 1 value값이기에 다른 곳에 저장하면 낭비니 p1 1 값이 저장된 곳에 1 값을 똑같이 p2 끌어오게 자바에서는 처리한다

이때 같은 곳을 가리키고 있냐고 알아보는 것이 ==이고 결과값은 true 나온다.

 

 

위에 처럼

String o1 = new String("java");
String o2 = new String("java");

둘이 값은 같은데 == 보면 어떨까? false 된다. 같은 값이지만 ==(primitive data type) 같은 곳에 위치하는지 저장됬는지 주소를 보고 판단하기 때문

 

 

그렇다면 equals(non primitive data type)?

o1.equals(o2) 메소드 호출

내용이 같은지 판단하기에 true

 

 

 

원시 데이터 타입(primitive) 때는 동등비교연산자를 쓰면 된다

원시 데이터 타입은 equals 가지고 있지 않기에 쓰면 에러

원시 데이터 타입이 아닌 (non primitive) 때는 equals 써라

 

 

 

예외 : 문자열

(자주사용 편의성 성능 등으로 인한 특혜)

마치 원시 데이터 타입처럼 작동함 : non primitive type이지만 새로운 값을 생성하지 않고, 같은 값의 주소로 처리

String o3 = "java2"
String o4 = "java2"

 

 

== 동등 비교 연산해보면 true

 

 

 

*이 객체와 객체가 같은지 알아볼려면 검색해서 따져봐라

객체라고 하는 것은 복합적인 데이터타입이기 때문에 비교가 쉽지 않기 때문

 



==와 equals의 차이를 더 이해하려면

call by reference와 call by value에 대해 아래 링크에서 좀 더 알아보자

https://rise-up.tistory.com/182

 

 

 

 

 

728x90
반응형
728x90

 

JAVA 제어문 - 4.1. 조건문 - 형식

조건문 Conditional Statement

 

모양

1)

if(조건) {
    실행될 코드
}

 

2)

if(조건) {
    실행될 코드
} else if(조건) {
    실행될 코드
} else {
    실행될 코드
}

 

 

 

시간에 순서에 따라서 a 1 b 출력하는 간단한 프로그램을 만들

System.out.println("a");
if(true) {
   System.out.println(1);
} else if(true){
     System.out.println(2);
} else {
    System.out.println(3);
}
System.out.println("b")

 


 

JAVA 제어문 - 4.2. 조건문 - 응용1

[run configuration] - [arguments] 값으로 egoing 입력

String id = "egoing";
String inputId = args[0];

System.out.println("Hi");

if(inputId.equals(id)) {
	System.out.println("Master!");
} else {
	System.out.println("Who are you?");
}

.equals() : 양쪽 내용을 비교한 값을 boolean type으로 반환

 

 

==에서는 같은 egoing인데 false 작동하고 .equals()로는 true 작동하는 이유

 == 주소값이 같아야 True .equals() 밸류값이 같으면 true이기 때문

다른말로, == true일려면 a=b 트루이지만 b 복사하여 새주소로 만들어진bfalse이다. 그러나 .equals() 이라면 값이 같으므로 true

 

 

== .equals() 차이

  종류 비교차이 call 방식
== 연산자(operator) 비교대상 주소값 call by reference
 .equals() 메소드(method) 비교대상의 내용 call by value

(주소값과 밸류값의 차이가 결국 call by reference value 개념과 같은 이야기인데

초보자들은 이해하기 어려우니 따로 분류)

 

 

Call by reference & value

1)call by reference : 주소값이 부여됨. 때문에 객체를 불러오면 주소값을 불러온다

      ex) class, 객체object

         String a = "100";

         String b = a;       # 같은 주소값

       (만약, new 써서 인스턴스를 만든다면 값은 값지만 주소는 다르게 된다)

 

2)call by value : 기본적으로 대상의 주소값을 가지지 않고 '' 할당받는 형태

     ex) int, float, double 같은 primitive type

 


 

JAVA 제어문 - 4.3. 조건문  - 응용2

 

[run configuration] - [arguments] 에서 두번째 인자값 추가 1111 입력

( 추가는 스페이스로 공백 주면 된다)

 

String id = "egoing";
String inputId = args[0];
String pass = "1111"; // pw : 1111
String inputPass = args[1];

System.out.println("Hi");

if(inputId.equals(id)) {
	if(inputPass.equals(pass)) {
		System.out.println("Master!");
	} else {
		System.out.println("Wrong pw!");
	}
} else {
	System.out.println("Who are you?");
}

 

// 위의 if문을 더 심플하게 해보는 코드

if(inputId.equals(id) && inputPass.equals(pass)) { # && 논리연산자(=and)
	System.out.println("Master!");
} else {
	System.out.println("Who are you?");
}

 

논리연산자(&&)

A and B(A B 둘다)처럼 양쪽 요건을 충족할 경우 작동하는 것이 논리연산자

(파이썬의 and 같다)

 

 

 

728x90
반응형

+ Recent posts