>  기사  >  Java  >  고전적인 Java 면접 질문 모음(1)

고전적인 Java 면접 질문 모음(1)

王林
王林앞으로
2020-07-02 16:30:322314검색

고전적인 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제