반복문(while문, for문,switch문), contentEquals

**변수명 지정할 때는 의미전달이 잘 되는 것으로(이후 팀프로젝트를 고려하여)



while 문

반복문 합계 구하기 관련 이해하기 표

i

sum + i

sum = sum + i

1

(0)+1

1

2

(0+1)+2

3

3

(0+1+2)+3

6

4

(0+1+2+3)+4

10

5

(0+1+2+3+4)+5

15




while문 : 단순한 상황에 유리한 반복문

for문 : 복잡한 상황에 유리한 반복문, 난전에 강하다. 반복문이 3중,4중으로 중첩될 때 강하다.

 

 

for문

 

for문

초기,조건,증감문을 한번에 선언 가능

가장 보편적인 반복문으로 가독성이 높다.

for문의 문법

초기, 조건, 증감문은 일부 또는 전부를 생략 가능하다.



for(초기문;조건문;증감문){


실행문;


}



초기문->조건문->실행문->증감문->조건문->실행문->증감문->조건문->실행문->조건문…..



변형식?변형문법

for문은 변형문법이 있어서 편리하다?

 

 

 

 

흐름제어문 (반복문 내에서 사용됨)

 

break문 -> 직역:깨다,탈출하다 => 반복문을 탈출

반복문이 실행되고 있는 시점에서 가장 근접한 반복문(루프) 탈출

여러 개의 루프가 중첩된 경우 현재 위치한 루프 하나만 탈출



continue문 ->

반복도중 처리를 중단하고 반복문의 시작 위치로 이동

정밀한 제어 구조를 만들 때 사용



인벤트=들여쓰기



무한루프

반복 횟수가 미리 정해져 있지 않고 무한히 반복되는 루프

무한루프 생성 코드

 

for문

for( ; ; ){  실행문; }



while문

while(true){  실행문; }




이중반복문 연습문제 -> 스타워즈

 

switch문 -> 경우의 수를 나누는 문법

하나의 변수값에 따라 개별적인 처리가 가능한 다중 선택문.

전체적인 메뉴 구성 시 보편적으로 사용.

 

한 case가 끝날 때마다 break;를 꼭 넣어줘야함

default는 어차피 제일 마지막에 보는 경우이기 때문에 break를 넣어도 안넣어도 상관없음




 

String a =”A”; 스트링상수(String Literal) : 리터럴값을 직접 스트링에 넣은 것

String b =”A” // String Constant pool에서 “A”가 있는지 찾아보고, 있으면 똑같은 주소를 저장한다.

 

--->그러므로 System.out.println(a==b);를 실행하면 true가 출력된다. = 내부적으로 String Constant pool을 공유해서 같은 번지를 공유하기 때문에 true가 되는 것(단순히 문자가 같아서가 아님)



String c = new String(“A”); 

String d= new String(“A”);

 

new의 역할 : heap memory(String Constant pool이 아닌 그냥 heap에다가)에 데이터를 만들어 달라는 역할 -> instance라는 매개체를 만들고, instance를 통해 String Constant pool을 봄. 

 

System.out.println(b==c);   ---> 결과 : false

System.out.println(c==d);   ---> 결과 : false

 

다 똑같은 1000번지 A를 보고 있지만, c와 d는 new를 통해 인스턴스(매개체)를 만들어서 인스턴스의 주소를 갖고 있기 때문에 저장하고있는 주소가 다름-> 인스턴스를 통해 1000번지를 보고 있음.

 

stack

a(1000번지주소)  b(1000번지주소)   c(2000번지주소)

d(3000번지주소)

heap

힙메모리내 영역

String Constant pool ->(문자열 상수들이 모이는 울타리) = Shared memory


1000번지 : “A”

2000번지 : 인스턴스(매개체)    ---> 1000번지를 봄

3000번지 : 인스턴스 (매개체)   ---> 1000번지를 봄

data

 

text

 

 

https://inor.tistory.com/39



결론 :

JAVA에서 문자열간 비교를 위해서 ==을 쓰지 않는다. Why? 의도한 비교가 아니게됨. 문자열의 비교가 아닌 메모리 안의 주소를 비교하게 됨.

 

변수가 저장하고 있는 주소를 비교하고 싶은게 아니라, 문자열 자체를 비교하고 싶은 것

System.out.println(a.contentEquals(b));