A. JDK는 자바 애플리케이션 개발을 위한 도구와 라이브러리를 제공하는것이며, JRE는 자바 애플리케이션을 실행하기 위한 환경을 제공하는것이다.
[정보]
JDK(Java Development Kit)란?
JRE(Java Runtime Environment) 란?
⇒ 개발(쓰기)은 안되고 실행(읽기)만 된다
A. == 는 비교하고자 하는 2개의 대상의 “주소값을 비교”, equals는 비교하고자 하는 2개의 대상의 “값 자체를 비교”
primitive type
에 대해서는 값을 비교reference type
에 대해서는 주소값을 비교public class compare {
public static void main(String[] args) {
//primitive type
int a = 10;
String s1 = "abcd";
String s2 = new String("abcd");
if(s1 == s2) {
System.out.println("두개의 값이 같습니다.");
}else {
System.out.println("두개의 값이 같지 않습니다.");
}
}
}
=> 두개의 값이 같지 않습니다.
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 str1 = "apple"; //리터럴을 이용한 방식
String str2 = "apple"; //리터럴을 이용한 방식
String str3 = new String("example"); //new 연산자를 이용한 방식
String str4 = new String("example"); //new 연산자를 이용한 방식
참고 : https://go-coding.tistory.com/35
https://coding-factory.tistory.com/536
A. 두 객체가 동일한 hashCode를 가지면 Equals()가 반드시 참이어야 합니다. 하지만 두 객체의 hashCode가 다르다고 해서 Equals()가 거짓일 필요는 없습니다.
메소드를 실행해서 리턴된 해시코드 값이 같은지를 본다. 해시 코드값이 다르면 다른 객체로 판단하고, 해시 코드값이 같으면equals()메소드로 다시 비교한다. 이 두 개가 모두 맞아야 동등 객체로 판단한다. 즉, 해시코드 값이 다른 엔트리끼리는 동치성 비교를 시도조차 하지 않는다.
<참고>
1. Do it! 자바프로그래밍 입문 p363 ~ p367
2. https://jisooo.tistory.com/entry/java-hashcode와-equals-메서드는-언제-사용하고-왜-사용할까
A. 사용 위치에따라 조금씩 기능이 달라집니다.
(예) final int MAX_SIZE = 100;
과 같이 상수를 선언
<참고>
1. Do it! 자바프로그래밍 입문 p305 ~ p310
A. 주어진 실수를 가장 가까운 정수로 반올림하는 메서드이다. -2를 나타냄
long
타입의 값을 반환A. 아니요. String은 참조 타입(reference type)입니다. 기본 데이터는boolean
, byte
, short
, int
, long
, float
, double
, char
와 같은 원시적인 데이터를 표현하는 타입을 말합니다.
String
은 객체로 취급되어 참조 타입으로 분류됨_A. 문자열을 조작하는 데 사용되는 주요 클래스로는 String
, StringBuilder
, StringBuffer
가 있습니다.
String
클래스는 불변 문자열에 사용되며, StringBuilder
와 StringBuffer
클래스는 가변 문자열 조작에 사용됨StringBuilder
는 스레드에 안전하지 않고, StringBuffer
는 스레드에 안전한 버전String
을 사용하고, 가변 문자열 조작이 필요하거나 멀티스레드 환경에서 안전한 작업이 필요한 경우 StringBuilder
또는 StringBuffer
를 사용String
클래스StringBuilder
클래스public static void main(String args[]) {
StringBuilder sb = new StringBuilder("Hello");
sb.append(" World");
sb.append("!");
}
StringBuffer
클래스참고
1. https://life-with-coding.tistory.com/416
2. https://developer-talk.tistory.com/774
A. 아니요. 동일하지 않습니다.
- String str = "i";
경우 자열 리터럴은 문자열 풀(String Pool)에 저장되는데,동일한 문자열 리터럴을 사용하는 경우에는 이미 존재하는 객체를 재사용하게 됩니다. 즉, 동일한 문자열 리터럴을 사용하는 경우에는 동일한 객체를 참조합니다.
- String str = new String("i");
는 new를 사용해서 새로운 객체를 생성합니다. 즉, 문자열 리터럴이 동일하더라도 다른 객체를 참조하게 됩니다.
A. 2가지 방법이 있습니다.
첫 번째 방법이 배열을 직접 조작하므로 일부 상황에서 성능이 더 우수할 수 있습니다.
public String reverseString(String str) {
char[] chars = str.toCharArray(); // 문자열을 문자 배열로 변환
int left = 0;
int right = chars.length - 1;
while (left < right) { // 배열을 역순으로 반전
char temp = chars[left];
chars[left] = chars[right];
chars[right] = temp;
left++;
right--;
}
return new String(chars); // 문자 배열을 다시 문자열로 변환하여 반환
}
StringBuilder
클래스의 reverse()
메서드를 사용하여 문자열을 반전시킬 수도 있습니다.public String reverseString(String str) {
return new StringBuilder(str).reverse().toString();
}
A. 굉장히 많은데 그중 자주 사용되는 것 3개만 보자면,
length()
: 문자열의 길이를 반환합니다.charAt(int index)
: 주어진 인덱스에 해당하는 문자를 반환합니다.equals(Object obj)
: 다른 객체와의 문자열 내용 비교를 수행합니다.length()
: 문자열의 길이를 반환합니다.charAt(int index)
: 주어진 인덱스에 해당하는 문자를 반환합니다.substring(int beginIndex)
, substring(int beginIndex, int endIndex)
: 주어진 범위에 해당하는 부분 문자열을 반환합니다.equals(Object obj)
: 다른 객체와의 문자열 내용 비교를 수행합니다.equalsIgnoreCase(String anotherString)
: 대소문자를 무시하고 다른 문자열과의 내용 비교를 수행합니다.contains(CharSequence sequence)
: 주어진 문자열이 포함되어 있는지 여부를 반환합니다.startsWith(String prefix)
, endsWith(String suffix)
: 주어진 접두사 또는 접미사로 시작하는지 또는 끝나는지 여부를 반환합니다.indexOf(int ch)
, indexOf(String str)
: 주어진 문자 또는 문자열이 처음으로 등장하는 인덱스를 반환합니다.lastIndexOf(int ch)
, lastIndexOf(String str)
: 주어진 문자 또는 문자열이 마지막으로 등장하는 인덱스를 반환합니다.toUpperCase()
, toLowerCase()
: 문자열을 대문자 또는 소문자로 변환합니다.trim()
: 문자열 앞뒤의 공백을 제거합니다.replace(CharSequence target, CharSequence replacement)
: 주어진 문자열 또는 문자를 다른 문자열로 대체합니다.split(String regex)
: 정규식을 기준으로 문자열을 분할하여 문자열 배열로 반환합니다.concat(String str)
: 다른 문자열을 현재 문자열에 연결합니다.isEmpty()
: 문자열이 비어 있는지 여부를 반환합니다.A. 추상 클래스에 선언된 추상 메서드는 해당 클래스를 상속하는 모든 하위 클래스에서 반드시 구현되어야 합니다. 따라서, 추상 메서드는 추상 클래스에서 필수적입니다.
abstract 반환타입 메소드이름();
/*
abstract class 클래스이름 {
...
abstract 반환타입 메소드이름();
...
}
*/
abstract class Animal { abstract void cry(); }
class Cat extends Animal { void cry() { System.out.println("냐옹냐옹!"); } }
class Dog extends Animal { void cry() { System.out.println("멍멍!"); } }
public class Polymorphism02 {
public static void main(String[] args) {
// Animal a = new Animal(); // 추상 클래스는 인스턴스를 생성할 수 없음.
Cat c = new Cat();
Dog d = new Dog();
c.cry();
d.cry();
}
}
참고 : http://www.tcpschool.com/java/java_polymorphism_abstract
A. 주요 차이점은 3가지이다.
⇒ 추상 클래스는 일반적으로 구체적인 클래스의 일반화된 개념을 나타내고 공통된 동작을 정의하는 데 사용됩니다. 추상 클래스는 직접적으로 인스턴스화되지 않으며, 하위 클래스에서 상속받고 구체화됩니다. 반면에, 일반적인 클래스는 객체를 직접 생성할 수 있고, 모든 메서드에는 구현이 포함되어 있어야 합니다.
A. 불가능 합니다. final을 클래스에 사용할 시에 해당 클래스는 상속할 수 없고, 확장할 수 없습니다.
[질문 출처]
https://careerly.co.kr/comments/83898?utm_campaign=user-share