자바를 자바 04 (Arithmetic Operators, Strings, 연산자, 문자열)

TonyHan·2020년 9월 13일
0

20) 자바

목록 보기
3/27

1.4 Arithmetic Operators

- Conditional operators(삼항 연산자)

time < 12 ? "am" : "pm";

C++과 동일하게 삼항 연산자를 지원한다.

- Bit-wise operators and shift operators

- op1 & op2 : and 연산
- op1 | op2 : or 연산
- op1 ^ op2 : xor 연산
- ~op1 : not 연산
- op1>>op2 : op2 만큼 비트를 오른쪽으로 이동 
	- 한 번 이동에 값이 1/2 + 맨 오른쪽에 있는 비트는 사라짐(소수점 버림)
- op1<<op2 : op2 만큼 비트를 왼쪽으로 이동 
	- 한 번 이동에 값이 2배 + 맨 왼쪽에 있는 비트는 사라짐(소수점 버림)

ex) when a = 0xA7 (16진수)

  • Bit assignment operator
    &= |= ^= <<= >>=
    ex>
a = a&b
a &=b

위의 두가지 표현은 같은 결과를 가지고 온다.

class opBit{
	public static void main(String[] args){
		char a = 0xA7
        System.out.println("a		: " 
        	+ Integer.toString(a,16) + '\n');
        System.out.println("a  & F0 : " 
        	+ Integer.toString(a & 0xF0,16) + '\n');
        System.out.println("a  | F0 : " 
        	+ Integer.toString(a | 0xF0,16) + '\n');
        System.out.println("a  ^ F0 : " 
        	+ Integer.toString(a ^ 0xF0,16) + '\n');
        }
}

여기에서 Integer.toString은 Integer 클래스의 toString static 메소드를 사용한 것으로
Integer.toString(연산, 출력방식) 의 형태로 연산의 결과를 출력방식에 맞추어 반환한다. 여기에서는 16으로 입력하였기 때문에 16진수 문자열로 반환이 된다.

- 연산자 우선순위(시험)


1 // 2 // 3-4 // 5-7 // 8 // 9
만약 우선순위가 같다면 왼쪽에서 오른쪽으로 연산을 진행한다.
1순위의 assignment는 오른쪽에서 왼쪽으로 연산을 진행한다.

ex>

int x = 1,y=2,z;

z = x + y*2 - ++x + (y+=3);
  • 원리
    왼쪽에서 오른쪽으로 진행하는데 '=', '+', '-', '+' operator에서 연산자 우선순위가 걸린 곳에서 넘겨온 연산을 모두 수행

  • 상세순서
    그래서 '=' 보다 '+'의 우선순위가 더 높기 때문에 '='를 넘어감
    '+' 보다 ''의 우선순위가 더 높기 때문에 '+'를 넘어감
    '
    ' 보다 '-'의 우선순위가 낮기 때문에 '*'을 우선 수행
    '+' 와 '-'는 우선순위가 같기 때문에 왼쪽('+')을 먼저 수행
    '='보다 '-'의 우선순위가 높기 때문에 '-'을 넘어감
    '-' 보다 '++x'의 우선순위가 높기 때문에 '++x'를 넘어감
    '++x' 보다 '+'의 우선순위가 낮기 때문에 '++x'를 우선 수행
    '-' 와 '+'는 우선순위가 같기 때문에 왼쪽('-')을 먼저 수행
    '=' 보다 '+'의 우선순위가 높기 때문에 '+'를 넘어감
    '+' 보다 '(' 의 우선순위가 높기 때문에 '('를 넘어감
    '(' 다음부터 ')' 까지 계산이 이루어짐
    '+' 다음 연산자가 없으니 '+' 연산 수행
    '=' 다음 연산자 없으니 '=' 연산 수행

  • 연산순서 : x는 1, y*2 는 4, ++x는 2, y+=3 은 5

  • 결과 : x는 2, y는 5, z는 8

ex>

int x=2, y=5, z=8;
System.out.println("x=y+=z : ",x=y+=z);

'=' 와 '+='의 연산자 우선순위는 같기 때문에 방향에 따라 y가 우선 13이 됨
이후 x에 13의 값이 입력됨



1.5 String

- 객체 생성

String location = "Java";

"Java" 자체가 String 타입의 Object

- concat 연산자

String greeting = "Hello " + location;

'+' 는 concat 연산자

- 자동 형변환

int age =42;
String output = age + " years";

age가 자동으로 String으로 형변환

- Static Methods

- join(기준, 문자열들...) : 수십개의 문자열을 기준을 가지고 붙이는 함수

```java
String names = String.join(", ","Peter","Paul","Mary");
```

- Instance Methods

- substring(이상, 미만) : 문자열 객체의 일부분을 잘르는 함수(0부터 시작, 이상~미만)
```java
String greeting = "Hello, World!";
String location = greeting.substring(7,12);
```
예외 적으로 substring(이상) 하면 이상부터 끝까지 반환

- split("기준") : 문자열을 기준을 가지고 분해
```java
String names = "Peter, Paul, Mary";
String[] result = names.split(", ");
```

- length : 문자열 길이를 반환(길이 이기 때문에 1부터 시작)

- equals(문자열) : 문자열이 같은지 확인 만약 같다면 true 반환 아니면 false 반환

- Wrapper Class

프로그램에 따라 기본 타입(Primitie Type)의 데이터를 객체로 취급해야 하는 경우가 생김
이때 기본 타입에 해당하는 데이터를 객체로 포장해 주는 클래스를 래퍼 클래스라고 부름

  • String 으로 갈거면 'toString'
  • String 을 제외한 자료형으로 갈거면 'parse자료형'

int => String

int n = 42;
String str = Integer.toString(n);

String => int

String str = "101010";
int n = Integer.parseInt(str);

String <=> double
Double.toString <=> Double.parseDouble

profile
신촌거지출신개발자(시리즈 부분에 목차가 나옵니다.)

0개의 댓글