티스토리 뷰
[산술 연산자]
[비트 연산자]
1) x << y:
정수 x의 각 비트를 y만큼 왼쪽으로 이동시킨다. 빈자리는 0으로 채워진다.
2) x >> y:
정수 x의 각 비트를 y만큼 오른쪽으로 이동시킨다. 빈자리는 정수 a의 최상위 부호비트와 같은 값으로 채워진다.
3) x >>> y:
정수 x의 각 비트를 y만큼 오른쪽으로 이동시킨다. 빈자리는 부호와 상관없이 0으로 채워진다. 앞자리가 0으로만 채워지기 때문에 결과값은 무조건 양수로만 나타난다.
4) x & y:
- AND 논리
- 두 비트 모두 1일 경우에만 연산 결과가 1
5) x | y:
- OR 논리
- 두 비트 중 하나만 1일 경우에만 연산 결과가 1
6) x ^ y:
- XOR 논리
- 두 비트중 하나는 1이고 다른 하나가 0일 경우에만 연산 결과가 1
7) ~ x:
- NOT 논리
- 비트 반전(보수)
[관계 연산자]
- 관계 연산자는 boolean 값을 return 한다. 참인 경우 True, 참이 아닌 경우 False
- 예
[논리 연산자]
- 예
[instanceof]
- instanceof는 객체 타입을 확인하는 연산자이다.
- 형 변환 가능여부를 확인하며 true/false로 결과를 반환한다.
- 주로 상속 관계에서 부모 객체인지 자식 객체인지 확인하는데 사용된다.
- 즉, (1) 자기 자신의 클래스 객체인가? (2) 자식 클래스의 객체인가? 확인하기 위해 사용한다.
- "객체 instanceof 클래스"를 선언함으로써 사용한다.
[Assignment(=) operator]
- 대입 연산자는 '='를 이용해서 사용한다.
- '=='는 '같다'를 의미, '='는 '대입'을 의미한다.
[화살표(->) 연산자]
- 람다 표현식은 Java 8버전 부터 적용.
- 화살표 연산자는 Java 에서 람다 표현식의 syntax 일부이다.
- 메소드를 람다 표현식으로 표현하면, 클래스를 작성하고 객체를 생성하지 않아도 메소드를 사용할 수 있다.
- (argument, ...) -> {expression}
// 메소드
int min(int x, int y) {
retrun x < y ? x : y;
}
// 람다 표현식
// 3항연산자 예시
(x, y) -> x < y ? x : y;
[3항 연산자]
- 피 연산자의 개수가 3개인 것을 의미
- (피연산자1) ? (피연산자2) : (피연산자3)
- 피연산자 1의 값이 true 이면, 피연산자2가 반환되고 false이면 피연산자3이 반환된다.
[연산자 우선순위]
- 단항, 이항, 삼항 연산자 순으로 우선 순위를 갖는다
- 산술, 비교, 논리, 대입 연산자 순으로 우선순위를 갖는다.
[Java13 switch 연산자]
- 기존의 switch/case 문을 좀 더 간결하게 사용
- switch 문에서 콜론(:) 을 화살표(->) 로 변경하여 사용할 수 있고, break문을 생략할 수 있다.
-break로 반환하는 문법이 Java12에 있었지만, Java13에서는 yield로 변경되었다.
String result = switch(n) {
case "A" -> {
System.out.println("1");
yield 1;
}
case "B" -> {
System.out.println("2");
yield 2;
}
case "C" -> {
System.out.println("3");
yield 3;
}
default -> {
System.out.println("그 외의 숫자");
yield 100;
}
}
[HashCode의 의미]
- 객체를 식별하는 하나의 정수 값을 의미.
- 해시 알고리즘에 의해 생성된 정수값.
- 해시코드 규약:
- equals 비교에 사용되는 정보가 변경되지 않았다면, 애플리케이션이 실행되는 동안 그 객체의 hashCode 메소드는 몇 번을 호출해도 일관되게 항상 같은 값을 반환해야 한다.(단, 애플리케이션을 다시 실행한다면 이 값이 달라져도 상관없다.)
- equals(Object)가 두 객체를 같다고 판단했다면, 두 객체의 hashCode는 똑같은 값을 반환해야 한다.
- equals(Object)가 두 객체를 다르다고 판단했더라도, 두 객체의 hashCode가 서로 다른 값을 반환할 필요는 없다. 단, 다른 객체에 대해서는 다른 값을 반환해야 해시테이블의 성능이 좋아진다.
- Object 클래스에 의해 정의된 hashCode() 방법은 별개의 개체에 대해 고유한 정수를 반환한다. (이것은 일반적으로 객체의 내부 주소를 정수로 변환하여 구현)
[자바 equals 와 ==의 차이]
- equals는 데이터 값을 비교하는 메서드이며, ==는 주소 값을 비교해주는 비교 연산자 이다.
String s1 = "str";
String s2 = "str";
String s3 = new String("str");
String s4 = new String("str");
System.out.println(s1 == s2 )); // true
System.out.println(s1.equals(s2)); // true
System.out.println(s1 == s3 ); // false
System.out.println(s1.equals(s3)); // true
System.out.println(s1 == s4 ); // false
System.out.println(s1.equals(s4)); // true
System.out.println(s3 == s4 ); // false
System.out.println(s3.equals(s4)); // true
- String 변수를 생성할 때는 두 가지 방법이 있다.
1. 리터럴을 이용한 방식
2. new 연산자를 이용한 방식
- 리터럴을 사용하게 되면 string constant pool이라는 영역에 존재하게 되고, new를 통해 string을 생성하면 Heap 영역에 존재하게 된다.
- String을 리터럴로 선언할 경우 내부 적으로 String의 intern() 메서드가 호출하게 되고 intern() 메서드는 주어진 문자열이 string constant pool에 존재하는지 검색하고 있다면 그 주소 값을 반환하고 없다면 string constant pool에 넣고 새로운 주소값을 반환한다.
String str1 = "apple"; //리터럴을 이용한 방식
String str2 = "apple"; //리터럴을 이용한 방식
String str3 = new String("example"); //new 연산자를 이용한 방식
String str4 = new String("example"); //new 연산자를 이용한 방식
- == 연산자는 비교하고자 하는 두개의 대상의 주소 값을 반환하는데 반해 String 클래스의 equals 메소드는 비교하고자 하는 두개의 대상의 값 자체를 비교한다.
public class compare {
public static void main(String[] args) {
String s1 = "abcd";
String s2 = new String("abcd");
if(s1 == s2) {
System.out.println("두개의 값이 같습니다.");
}else {
System.out.println("두개의 값이 같지 않습니다.");
}
}
}
// 두개의 값이 같지 않습니다.
- == 연산자의 경우 참조 타입 변수들 간의 연산은 동일한 객체를 참조하는지 다른 객체를 참조하는지 알아볼 때 사용한다. 따라서, 자바에서 문자열을 비교하려면 equals 라는 메소드를 활용하여 두개의 값을 비교해 줘야한다.
public class compare {
public static void main(String[] args) {
String s1 = "abcd";
String s2 = new String("abcd");
if(s1.equals(s2)) {
System.out.println("두개의 값이 같습니다.");
}else {
System.out.println("두개의 값이 같지 않습니다.");
}
}
}
// 두개의 값이 같습니다.
- String 클래스안에 있는 equals라는 메서드를 사용하면 두 비교대상의 주소 값이 아닌 데이터값을 비교하기 때문에 어떻게 String을 생성하느냐에 따라 결과가 달라지지 않고 정확한 비교를 할 수 있다.
'Study > Java' 카테고리의 다른 글
[스터디 4주차] JUnit5 (0) | 2022.01.02 |
---|---|
[스터디 4주차] 선택문/반복문 (0) | 2022.01.02 |
[스터디 2주차] 데이터 타입(Primitive type, Reference type) (0) | 2021.12.12 |
[스터디 1주차] Garbage Collection(GC) (0) | 2021.12.12 |
[스터디 1주차] 컴파일 하는 방법 (0) | 2021.12.12 |
- Total
- Today
- Yesterday
- 완전탐색
- 리스트2
- SW
- 리스트
- 운영체제
- 이차 리스트
- 데이터베이스
- CS
- CS 스터디
- 정렬
- 리스트함축
- 프로그래머스
- 프로세스 주소공간
- 자료구조
- 자료구조와알고리즘 23강
- 알고리즘
- https
- 연결리스트활용
- 보험
- CS.
- 이진탐색
- 스터디
- 네트워크
- 자바
- Greedy sort
- 프로그래머스강의
- 파이썬
- It
- 코드업 기초
- 리스트 복사
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |