package array03;

public class StringEX01 {
	public static void main(String[] args) {
		String s1 = new String("나무");
		String s2 = new String("나무");
		System.out.println(s1 == s2);

		String s3 = "나무";
		String s4 = "나무";
		System.out.println(s3 == s4);

		System.out.println(s1 == s4);

		System.out.println(s1.equals(s4));

	}
}

 

String은 첫글자가 대문자이기때문에 클래스다

하지만 String s = new String("나무"); 
->heap에 만들어짐

값을 바꿔도 주소가 그대로 값만 바뀐다

String s = "나무";  
-> StringConstantPool에 만들어짐

String은 heap안의 StringConstantPool에 저장된다(자바만의 특징)
heap과 다르게
StringConstantPool에 같은 값이 있는지 찾고
있다면 같은 주소를 저장하고
없다면 새로운 주소를 만들어서 저장 

String s = "나무";
s =  s+ "안녕";
s 주소에 넣는 것이 아니라
새로운 주소를 만들어서 저장

문자열을 계속 더하고 싶다면
새로운 주소를 만들지 않는 new로 바꿔서 사용하는 것이 좋다

check.equals("n")
는 처음에 == 으로 값을 비교하고 같으면 break
주소값이면 주소로 찾아가 서로 비교함.

 

 

포문

 

2의 승수 구하기

package array03;

public class ArrayEx01 {

	public static void main(String[] args) {
		// 반복 stack
		int num = 1;
		for (long i = 2L; i <= 4000000000000000000L; i = i * 2) { // 콤마가 없으니 인수가 1개, 세미콜론은 구분자
			System.out.println("2의 " + num + "승 : " + i);
			num++;
		}
	}
}

 

 

구구단

package array03;

public class Gugudan {

	public static void main(String[] args) {
		for (int n = 2; n < 10; n++) {
			for (int i = 1; i < 10; i++) {
				System.out.println(n + "*" + i + "=" + (n * i));
			}
			System.out.println();
		}
	}
}

(2단부터 9단까지)

 

 

구구단 단수 지정

package array03;

import java.util.Scanner;

public class Gugudan2 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("구구단을 시작합니다.");
		boolean confirm = true;
		while (confirm) {
			System.out.println("숫자를 입력하세요. 2~9");
			int num = sc.nextInt();

			for (int i = 1; i <= 9; i++) {
				System.out.println(num + "*" + i + "=" + (num * i));
			}
			System.out.println("계속 진행할까요? y or n");
			String check = sc.next();
			if (check.equals("n")) {
				//break; // 가장 가까운 반복문을 빠져나갈때 사용
				confirm = false;
			}
		}
		System.out.println("구구단 프로그램 종료");
	}
}

 

 

 

 

'Programming Language > Java' 카테고리의 다른 글

이클립스 run 설정  (0) 2020.03.23
자바 String  (0) 2020.03.23
자바 value passing, reference passing  (0) 2020.03.23
자바 static, heap, stack 영역 구분  (0) 2020.03.20
자바 함수 쓰는 위치  (0) 2020.03.20
package ch03;

class Data {
	int num = 10;
}

public class MethodEx02 {
	
	static void 증가(int num) {
		num++;
		System.out.println("증가 num : " + num);
	}
	
	// 값이 소중하다면 return을 하거나 heap에 옮겨담아야한다
	static int 증가1(int num) {
		num++;
		System.out.println("증가 num : " + num);
		return num;
	}
	
	static void 감소(int num) {
		num--;
		System.out.println("감소 num : " + num);
		
	}
	
	static void 감소1(Data d) {
		d.num--;
		System.out.println("감소1 num : " + d.num);
		
	}
	
	public static void main(String[] args) {
		
		int myNum = 100;
		증가(myNum); // call by value passing
		System.out.println("myNum : " + myNum);
		
		myNum = 증가1(myNum); // call by value passing
		System.out.println("myNum : " + myNum);
		
		
		Data data = new Data();
		감소(data.num); // call by value passing
		System.out.println("data.num : " + data.num);
		
		
		감소1(data); // call by reference passing
		System.out.println("data.num : " + data.num);
		
	}
}

 

프로그램을 실행하면 메모리에 올라가고 프로세스가 된다
(파일 -> 프로세스)

cpu는 메모리에 올라온 것만 읽을 수 있다

------------------------


JVM이 실행되면

1. 클래스를 메모리에 로딩

2. static 을 메모리(static영역)에 올림

3. main(함수) 을 실행

----------------------


static은 프로그램을 실행할때 메모리(static영역)에 로딩되고 프로그램을 종료하면 없어진다.

stack은 함수를 실행할때 메모리(stack영역)에 로딩되고 함수를 종료하면 없어진다.

heap은 static이 아닌 것들을 부를 때 메모리(heap영역)에 로딩되고, 직접 종료 시키면 없어진다. 
(JVM에서는 필요없는 구간부터 알아서 없애줌)

 

예제 코드

package ch03;

class 자판기 {

	static String cola = "코카콜라";
	static String water = "물";

	static String 작동(int money) {
		System.out.println("자판기가 작동합니다.");
		System.out.println(money + "원을 받았습니다.");
		return cola;
	}
}

class MemoryExample {

	
	int money = 500;

	int 용돈받기(String msg) {
		System.out.println(msg);
		System.out.println("용돈을 받았습니다.");
		return money;
	}

	public static void main(String[] args) {
		MemoryExample me = new MemoryExample();
		int money = me.용돈받기("아빠 만수무강하세요.");
		String output = 자판기.작동(money);
		System.out.println(output + "을 받았습니다. 잘 마실께요!!");
	}
}

 

 

작동순서

 

----------------- 
(1) 자판기 (static) 
----------------- 
cola = "코카콜라"; 
water = "물";  
작동() 


--------------------------- 
(2) MemoryExample (static) 
--------------------------- 
main() 


-------------------- 
(3) main (stack영역) 
-------------------- 
me 
money = me.용돈받기() 
output = 자판기.작동() 


-------------------- 
(4) me (heap영역) 
-------------------- 
money = 500 
용돈받기() 


-------------------- 
(5) me.용돈받기 (stack영역) 
-------------------- 
msg = "아빠 만수무강하세요."


-------------------- 
(6) 5번영역 소멸 
-------------------- 


-------------------- 
(7) 자판기.작동(stack영역) 
-------------------- 
money = 500



-------------------- 
(8) 7번 영역 소멸 
-------------------- 



-------------------- 
(9) 4번 영역 소멸 
-------------------- 



-------------------- 
(10) 3번 영역 소멸 
-------------------- 



-------------------- 
(11) 1, 2번 영역 소멸 
--------------------

package ch03;

// 자바 기준
// 메소드(함수)는 클래스 안에 작성할 수 있다.
// 메소드(함수)는 메소드 (함수)안에 작성할 수 없다.

public class MethodEx01 {

	// 전역공간

	// void는 리턴하지 않는다는 뜻이다

	static int add(int n1, int n2) {
		int result = n1 + n2;
		// System.out.println("result : " + result);
		return result;
	}

	public static void main(String[] args) {
		
		int num = MethodEx01.add(5, 3);
		System.out.println("결과 : " + num);

	}
}

// 자바 기준
// 메소드(함수)는 클래스 안에 작성할 수 있다.
// 메소드(함수)는 메소드 (함수)안에 작성할 수 없다.

 

 

 

자바 기본 연산

package ch01;

public class OperEx01 {

	public static void main(String[] args) {

		// 한 라인에 두가지 변수를 선언 할 수 있다.

		int n1, n2;
		n1 = 5;
		n2 = 3;

		// 인텔리제이 키맵이라면 shift + f10으로 실행

		System.out.println(n1 + n2);
		System.out.println(n1 - n2);
		System.out.println(n1 / n2);
		System.out.println(n1 * n2);
		System.out.println(n1 % n2);
		
	}

}

 

 

문자열과 숫자 + 연산

package ch01;

public class OperEx02 {

	public static void main(String[] args) {
		int sum = 0;
		int distance = 100;
		int move = 20;

		sum = sum + move;
		System.out.println(sum);
		
		// 문자열과 숫자를 +를 하여 더하면 숫자가 문자열 뒤에 붙어서 문자열이 된다.
		
		System.out.println("움직인 거리 : " + sum);

	}

}

 

 

변수 뒤에 ++ 을 붙이면 해당변수에 1을 더함

package ch01;

public class OperEx03 {

	public static void main(String[] args) {
		int sum = 0;

		// 1 씩 증가

		sum++;
		System.out.println(sum);
	}

}

 

 

조건정하기
콘솔창에 true 또는 false를 입력하고 엔터

package ch01;

import java.util.Scanner;

public class ConEx01 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		boolean check = sc.nextBoolean();
		
		
		if (check) { // boolean 1bit 경우의 수 2가지, true / false
			System.out.println("참입니다");
		} else {
			System.out.println("거짓입니다.");
		}
	}
}

 

 

학점 계산기
숫자를 입력하면 학점이 나옴

package ch01;

import java.util.Scanner;

public class ConEx03 {
	public static void main(String[] args) {
		System.out.println("성적을 입력하세요 : ");
		Scanner sc = new Scanner(System.in);
		int point = sc.nextInt(); // 정수 입력받기

		if (point <= 100 && point >= 90) {
			System.out.println("A학점입니다.");
		} else if (point < 90 && point >= 80) {
			System.out.println("B학점입니다.");
		} else if (point < 80 && point >= 70) {
			System.out.println("C학점입니다.");
		} else if (point < 70 && point >= 60) {
			System.out.println("D학점입니다.");
		} else if (point < 60 && point >= 0) {
			System.out.println("F학점입니다.");
		} else {
			System.out.println("잘못 입력 하셨습니다.");
		}
	}
}

 

 

논리연산자

package ch01;

public class LogicalOperator {

	public static void main(String[] args) {
		// 비교연산
		System.out.println('a' > 'b');
		System.out.println(3 >= 2);
		System.out.println(-1 < 0);
		System.out.println(3.45 <= 2);
		System.out.println(3 == 2);
		System.out.println(3 != 2);
		System.out.println(!(3 != 2));

		// 비교 연산과 논리 연산 복합
		System.out.println((3 > 2) && (3 > 4));
		System.out.println((3 != 2) || (-1 > 0));
		System.out.println((3 != 2) ^ (-1 > 0));

	}

}

 

 

중첩 if else 문

// 점수와 학년을 입력받아 60점 이상이면 합격, 미만이면 불합격을 출력한다. 4학년의 경우 70점 이상이어야 합격이다.

package ch01;

import java.util.Scanner;

public class NestedIf {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);

		System.out.println("점수를 입력하세요(0~100): ");
		int score = scanner.nextInt(); // 점수 읽기
		System.out.println("학년을 입력하세요(1~4): ");
		int year = scanner.nextInt(); // 학년 읽기

		if (score >= 60) {
			if (year != 4)
				System.out.println("합격!");
			else if (score >= 70)
				System.out.println("합격!");
			else
				System.out.println("불합격!");
		} else
			System.out.println("불합격!");

		scanner.close();
	}
}

 

 

'Programming Language > Java' 카테고리의 다른 글

자바 static, heap, stack 영역 구분  (0) 2020.03.20
자바 함수 쓰는 위치  (0) 2020.03.20
자바 프로그래밍 표기법  (0) 2020.03.17
자바 java 파일 기본 규칙  (0) 2020.03.17
200317 // 이클립스  (0) 2020.03.17

1. 자바 파일 - 파스칼 표기법
ex) redapple -> RedApple
2. 카멜 표기법 - 자바 변 수 및 함수
ex) redapple -> redApple
3. 언더스코어 표기법
ex) redapple -> red_apple

1. src 내부에 있는 폴더를 패키지라고한다

2. 패키지 안에는 클래스(이름은 파스칼 표기법)

3. .java파일명과 클래스 이름은 동일해야한다

4. 모든 코드는 클래스 내부에 작성한다.

 

'Programming Language > Java' 카테고리의 다른 글

자바 기초 - 숫자 연산, ++, 조건문, if문, 논리연산자  (0) 2020.03.20
자바 프로그래밍 표기법  (0) 2020.03.17
200317 // 이클립스  (0) 2020.03.17
자바 매개변수 - 가변인수  (0) 2020.03.11
자바 배열  (0) 2020.03.11

+ Recent posts