집 >Java >Java인터뷰 질문들 >고전적인 Java 면접 질문 모음(1)
1. &와 &&의 차이점
(권장 학습: java 인터뷰 질문 )
& 연산자에는 두 가지 용도가 있습니다.
(1) 비트 AND
(2 ) 논리 그리고.
&& 연산자는 단락 AND(또는 간결한 AND) 연산입니다. 논리 AND와 단락 AND의 차이는 매우 큽니다. 둘 다 연산자의 왼쪽과 오른쪽에 있는 부울 값이 true여야 하지만 전체 표현식의 값은 true입니다.
&&를 단락 연산이라고 하는 이유는 &&의 왼쪽 표현식의 값이 거짓이면 오른쪽 표현식이 직접 단락되어 아무런 연산도 수행되지 않기 때문입니다. & 대신 &&를 사용해야 하는 경우가 많습니다.
예를 들어 사용자 이름이 null이 아니고 빈 문자열이 아닌지 확인하기 위해 사용자 로그인을 확인할 때 사용자 이름 != null &&!username.equals("")로 작성해야 하며 이 둘의 순서는 바꿀 수 없습니다. , & 연산자도 사용할 수 없습니다. 왜냐하면 첫 번째 조건이 true가 아니면 문자열의 같음 비교를 전혀 수행할 수 없기 때문입니다. 그렇지 않으면 NullPointerException이 발생합니다.
2. final 키워드를 사용하여 변수를 수정하면 참조를 변경할 수 없거나 참조된 개체를 변경할 수 없다는 뜻인가요?
final 키워드를 사용하여 변수를 수정한다는 것은 참조 변수는 변경할 수 없지만 참조 변수가 가리키는 객체의 내용은 여전히 변경할 수 있다는 의미입니다.
예:
public class Test10 { // final修饰基本类型的变量 public static final char CHAR = '中'; // final修饰引用类型的变量 public static final StringBuffer a = new StringBuffer("StringBuffer"); public static void main(String[] args) { // 编译报错,引用不能变 // a = new StringBuffer("hehe"); // 引用变量所指向的对象中的内容还是可以改变的 a.append("xxx"); } public static int method1(final int i) { // i = i + 1;// 编译报错,因为final修饰的是基本类型的变量 return i; } // 有人在定义方法的参数(引用变量)时,可能想采用如下的形式来阻止方法内部修改传进来的参数对象, // 实际上,这是办不到的,在该方法内部任然可以增加如下代码来修改参数对象 public static void method2(final StringBuffer buffer) { buffer.append("buffer");// 编译通过,因为final修饰的是引用类型的变量 } }
3. 정적 변수와 인스턴스 변수의 차이점은 무엇인가요?
구문의 차이점: 정적 변수는 static 키워드로 수정해야 하지만 인스턴스 변수는 그렇지 않습니다.
프로그램이 실행될 때의 차이점: 정적 변수는 클래스에 속하고 인스턴스 변수는 객체에 속합니다.
인스턴스 변수는 인스턴스 객체를 생성해야 하며, 이 인스턴스 변수를 사용하기 전에 그 안에 있는 인스턴스 변수에 공간이 할당됩니다.
정적 변수는 프로그램이 클래스의 바이트코드를 로드하는 한 카테고리 수량입니다. 변수가 할당됩니다. 공간을 사용할 준비가 되었습니다.
결론적으로 인스턴스 변수는 객체 생성 후 이 객체를 통해 사용해야 하며, 정적 변수는 클래스명을 사용하여 직접 참조할 수 있습니다.
참고: (정적) 정적 변수 사용에도 제한이 있습니다. 정적이 아닌 메서드와 클래스의 변수는 정적 메서드에서 호출할 수 없습니다. static으로 수정된 변수는 클래스가 로드된 후 메모리 공간이 하나만 있습니다. . 클래스의 모든 인스턴스 개체에서 공유할 수 있습니다.
4. 정적 메서드 내에서 비정적 메서드를 호출할 수 있나요?
아니요.
비정적 메서드는 개체와 연결되어 있으므로 개체에 대한 메서드 호출이 이루어지기 전에 개체를 만들어야 합니다. 정적 메서드를 호출할 때는 개체를 만들 필요가 없으며 직접 호출할 수 있습니다.
즉, 정적 메서드가 호출될 때 인스턴스 개체가 생성되지 않았을 수 있습니다. 정적 메서드에서 비정적 메서드에 대한 호출이 실행되는 경우 연결된 비정적 메서드는 무엇입니까? 이 논리는 설정할 수 없으므로 정적 메서드는 내부적으로 비정적 메서드를 호출합니다.
5. "==" 메소드와 같음 메소드의 차이점은 무엇인가요?
== 연산자는 특히 두 변수의 값이 같은지, 즉 해당 변수에 해당하는 메모리에 저장된 값이 같은지 비교할 때 사용됩니다. 두 가지 기본 데이터 유형 또는 두 참조 변수가 동일한지 비교하려면 == 연산자만 사용할 수 있습니다.
equals 메서드는 두 책이 동일한지 비교하는 것과 마찬가지로 두 개의 독립된 개체의 내용이 동일한지 비교하는 데 사용됩니다.
코드 예:
String a = new String("AA"); String b = new String("AA"); System.out.println(a==b); System.out.println(a.equals(b));
두 개의 새로운 문은 두 개의 개체를 생성한 다음 두 개의 변수 a와 b를 사용하여 각각 개체 중 하나를 가리키며 첫 번째 주소는 다릅니다. a와 b에 저장된 값은 다르기 때문에 a==b 표현식은 false를 반환합니다. 두 객체의 내용이 동일하므로 a,equals(b)는 true를 반환합니다.
참고: 문자열 비교는 기본적으로 같음 메서드를 사용합니다.
클래스에 자체 정의된 equals 메서드가 없으면 Object 클래스의 equals 메서드가 상속됩니다. Object 클래스의 구현 코드는 다음과 같습니다.
boolean equals(Object o) { return this==o; }
이는 클래스에 해당 메서드가 없다는 의미입니다. 자신이 정의한 equals 메소드, 기본값은 == 연산자를 사용하는 것과 동일합니다. 즉, 두 변수가 가리키는 객체를 비교하여 동일한 객체인지 확인합니다. 이때, equals와 ==를 사용하면 같은 결과를 얻을 수 있습니다. 두 인스턴스 객체의 내용이 동일한지 비교할 수 있는 클래스를 작성하려면 equals 메서드를 재정의해야 합니다.
위 내용은 고전적인 Java 면접 질문 모음(1)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!