Java 초보자가 자주 묻는 질문(추천)
기본 데이터 유형
Q. 왜-0/3 결과는 0이고 -0.0/3.0 결과는 -0.0입니까?(뒤에 결과 0에 음수 기호 있음)
A. Java에서 정수는 부호로 표시됩니다.보충 부호에서 0은 단지 하나의 표현 방법만 있다.다른 한편, 부동점수는 IEEE 표준으로 표시되는데 0에 대해서는 두 가지 표현 방법이 있는데 0과 0이다.
Q. 소수점 하나로% 를 나눌 수 있나요?
A.그럼요.예를 들어 angle이 음수가 아니라면, angle% (2* Math.PI) 는 angle을 0에서 2π 사이로 변환합니다.
Q. ab가 모두 기본 유형 변수일 때 a+=b와 a=a+b의 효과는 차이가 있습니까?
A. a와 b의 유형이 같지 않으면 그 두 문장의 효과는 차이가 있을 수 있다.a+=b는 a=(int)(a+b)와 같고 이런 상황에서 a는 int형이고 b는float형일 수 있다.그러나 동등한 상황에서 a=a+b는 오류를 컴파일할 수 있다.
조건문과 순환문
Q. 문자열이 동일하다고 판단하는 이유는 ==?
A. 이는 기본 유형(int, double, boolean)과 참조 유형(String)의 차이를 나타냅니다.
Q. 어떤 상황에서 한 문장 블록의 괄호를 생략할 수 없는 것은 없습니까?
A. 아래의 예에서 첫 번째 코드는 합법적이며 두 번째 코드는 컴파일 오류를 일으킬 수 있습니다.기술적으로 말하자면 그 문장은 변수 성명이지 문장이 아니기 때문에 오류를 보고할 수 있다.
// legal
for (int i = 0; i <= N; i++) {
int x = 5;
}
// illegal
for (int i = 0; i <= N; i++)
int x = 5;
Q. 아래 두 단락의 코드에서 효과가 다른가요?
for (<init stmnt> <boolean expr>; <incr stmnt>) {
<body statements>
}
<init stmnt>;
while (<boolean expr>) {
<body statements>
<incr stmnt>
}
A. 있어요.순환 블록에서continue 문장을 사용하면for의 코드에 계수기가 1을 추가합니다.while 코드에서는continue에 의해 생략되었기 때문에 계수기는 하나를 추가하지 않습니다. 수조
Q. 일부 Java 개발자는 int[]a 대신 int[]a를 사용하여 그룹을 설명합니다.이 두 가지는 어떤 차이가 있습니까?
A. 자바에서 이 두 가지 용법은 모두 합법적이며 그들의 역할은 모두 같다.전자는 C에서 그룹을 정의하는 방법이다.후자는 JAVA가 추천하는 방법이다. 왜냐하면 그의 작법 int[]는 이것이 int의 수조라는 것을 더욱 잘 나타낼 수 있기 때문이다.
Q. 왜 수조 아래에 1부터 시작하는 것이 아니라 0부터 시작하는 것을 표시합니까?
A. 이런 전통은 기계 언어의 프로그래밍 방법에서 기원한다.기계 언어에서, 수조 아래 표시는 원소의 위치와 첫 번째 원소 사이의 편이량을 계산하는 데 사용된다.1부터 시작하면 편이를 계산할 때 감법 연산을 해야 하는데 낭비다.
Q. 만약 내가 음수를 수조로 표시한다면 무슨 일이 일어날까요?
A. 아래 표식이 0보다 작거나 그룹 길이보다 크면 JAVA가 실행될 때 Array Index Out OfBounds Exception 이상을 던져 프로그램 실행을 중단합니다.
Q. 그룹을 사용할 때 주의해야 할 다른 함정이 있나요?
A. JAVA는 그룹을 만들 때 초기화한다는 것을 기억해야 합니다. 따라서 그룹을 만드는 데 O(N)가 필요하다는 것을 설명합니다.
Q. a[]가 하나의 그룹인데 왜 System인가.out.println(a)은 그룹 요소를 출력하지 않고 @f62373처럼 16진수를 출력합니까?
A. 네.이 문장은 메모리에 있는 그룹의 주소를 출력합니다. 시스템은 자동으로 그룹의 toString () 방법을 호출합니다. 이 문제는 toString () 방법의 원본을 볼 수 있습니다.
함수 호출
Q. 수조를 함수로 호출할 때의 매개 변수로 사용할 때 나는 항상 의심을 느낀다.
A.네.값 매개 변수 (매개 변수는 기본 변수 유형) 와 인용 매개 변수 (예를 들어 그룹) 간의 차이를 명심해야 한다.
Q. 그런데 왜 모든 매개 변수를 전가의 방식으로 사용하지 않습니까?
A. 그러나 수조가 크면 수조를 복제하는 데 많은 성능 비용이 필요합니다.이 때문에 절대 다수의 언어는 수조를 함수에 전송하는 것을 지원하지만 복사본을 복사하지 않는다. - MATLAB 언어를 제외한다.
귀속 호출
Q. 순환만 하고 귀속은 안 되는 경우가 있나요?
A. 불가능합니다. 모든 순환은 귀속으로 대체할 수 있습니다. 대부분의 경우 귀속은 추가 메모리가 필요합니다.
Q. 귀속만 할 수 있고 순환을 할 수 없는 경우는 없나요?
A. 불가능합니다. 모든 귀속 호출은 순환으로 표시할 수 있습니다.예를 들어 당신은 while 방식으로 창고를 실현할 수 있습니다.
Q. 그럼 어떤 것을 선택해야 하나요, 돌아가는 방식인가요, 순환하는 방식인가요?
A. 코드의 가독성과 효율성을 기준으로 합니다.
Q. 귀속 코드를 사용할 때 공간 비용과 중복 계산이 걱정됩니다(예를 들어 귀속으로 Fibonacci를 풀기).다른 걱정할 거 없어요?
A. 귀속 코드에서 빅데이터 유형(예를 들어 수조)을 만들 때 추가로 주의해야 한다. 귀속이 추진됨에 따라 메모리 사용이 신속하게 증가하고 메모리 사용이 증가하기 때문에 운영체제가 메모리를 관리하는 시간 비용도 증가한다.
정렬 및 찾기
Q. 왜 우리는 하나의 프로그램이 정확하다는 것을 증명하기 위해 큰 그림을 써야 합니까?
A. 잘못된 결과를 방지하기 위해.2분 찾기가 하나의 예다.이제 2점 찾기의 원리를 알게 되면 귀속 형식의 2점 찾기를 순환 형식의 2점 찾기로 바꿀 수 있다.Knuth 교수는 1946년에 2점 찾기 논문을 발표했지만 첫 번째 정확한 2점 찾기 프로그램은 1962년에 등장했다.
Q. JAVA 내 라이브러리에 정렬하고 찾는 함수가 있습니까?
A. 있어요.자바에 있어요.util.Arrays에는 Arrays가 포함되어 있습니다.sort() 및 Arrays.binarySearch () 방법.Comparable 형식은 병합 정렬을 사용하고 기본 데이터 형식은 빠른 정렬을 사용합니다.기본 유형은 값 전달이기 때문에 빠른 정렬은 병합 정렬보다 빠르고 추가 공간이 필요하지 않습니다.
Q. 왜 JAVA 라이브러리는 무작위 pivot 방식의 빠른 정렬을 사용하지 않습니까?
A. 네.일부 프로그래머들이 코드를 디버깅할 때 확실한 코드 구현이 필요할 수 있기 때문이다.무작위 pivot를 사용하는 것은 이 원칙에 위배된다.
스택 및 대기열
Q. 자바 라이브러리에서 Stacks와queues에 대한 구현이 있습니까?
A. Java 라이브러리에 java가 내장되어 있습니다.util.Stack, 하지만 진정한 창고가 필요하다면 사용하지 말아야 합니다.그것은 N번째 요소에 접근하는 것과 같은 추가 기능을 실현했기 때문이다.또한 창고 밑에 요소를 삽입하는 것도 지원하기 때문에 대기열처럼 보인다.비록 이러한 추가 기능을 실현하면 프로그래머에게 가산점이 되지만, 우리가 데이터 구조를 사용하는 것은 모든 기능을 사용하고 싶을 뿐만 아니라, 우리가 마침 필요로 하는 그런 구조가 필요하다.JAVA가 창고에 대한 실현은 전형적인 넓은 인터페이스의 예이다.
Q. 범주를 포함하는 창고를 표시하기 위해 그룹을 사용하고 싶은데 다음 코드가 잘못 컴파일되었습니다.왜?
private Item[] a = new Item[max];
oldfirst = first;
A. 좋은 시도.불행하게도 Java 1.5에서 범용 그룹을 만드는 것은 지원되지 않습니다.예를 들어 아래의 글쓰기를 사용하면cast를 사용할 수 있습니다.
private Item[] a = (Item[]) new Object[max];
oldfirst = first;
근본적인 원인은 JAVA의 수조가'협동적(covariant)'이기 때문이다. 그러나 범형은 그렇지 않다.예를 들어 String[]은 Object[]의 피드 유형이지만 Stack이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
38. Java의 Leetcode 솔루션텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.