Java의 length 및 length () 심층 분석

3171 단어 javalength
본문을 시작하기 전에 다음 문제를 먼저 고려하다
자동 완성 기능이 있는 IDE를 사용하지 않는 경우 배열의 길이를 어떻게 얻습니까?그리고 문자열의 길이를 어떻게 얻습니까?
이 문제는 초급과 중급 수준을 포함한 서로 다른 수준의 프로그래머에게 물어본 적이 있다.그들은 모두 이 문제에 정확하고 자신 있게 대답할 수 없다. (만약 당신이 이 문제에 대해 정확하고 자신 있게 대답할 수 있다면, 이 지식을 대다수 중급 프로그래머들보다 잘 파악하고 있다는 것을 증명할 수 있다.)현재 많은 IDE가 코드 보완 기능을 가지고 있기 때문에 개발자들은 많은 문제에서 매우 얕게 이해한다.
위의 질문에 대한 정확한 대답 자세는 다음과 같다.

int[] arr = new int[3];
System.out.println(arr.length);// length 

String str = "abc";
System.out.println(str.length());// length() 
질문이 왔습니다. 왜 수조에length 속성이 있고 문자열이 없습니까?아니면, 왜 문자열은 length() 방법이 있고, 수조는 없습니까?
왜 수조에length 속성이 있습니까?
우선, 수조는 고정된 수량의 같은 유형의 값을 포함하는 용기 대상이다.일단 수조가 만들어지면 그의 길이는 고정된다.그룹의 길이는final 실례 변수의 길이로 사용할 수 있습니다.따라서 길이는 하나의 그룹의 속성으로 볼 수 있다.
두 가지 배열 생성 방법이 있습니다.
1. 그룹 표현식을 통해 그룹을 만듭니다.
2. 초기화 값을 통해 그룹을 만듭니다.
어떤 방식을 사용하든지 간에 일단 수조가 만들어지면 그 크기는 고정된다.
표현식을 사용하여 그룹을 만드는 방식은 다음과 같다. 이 방식은 원소 유형, 그룹의 차원, 그리고 최소한 한 차원의 그룹의 길이를 가리킨다.
이 성명 방식은 요구에 부합된다. 왜냐하면 그는 하나의 차원 길이를 지정했기 때문이다. (이 그룹의 유형은 int, 차원은 2, 1차원 길이는 3)

int[][] arr = new int[3][];
그룹을 초기화하는 방식으로 그룹을 만들 때 모든 초기 값을 제공해야 합니다.형식은 {와}를 사용하여 모든 초기 값을 한데 묶고 분리하는 것입니다.

int[] arr = {1,2,3};
주:
여기에 의문이 하나 있을 수 있다. 수조의 크기가 초기화될 때 정해진 것이기 때문에 int[][] arr = new int[3][]; 의미의 수조는 수조의 2차원 크기를 제시하지 않았다. 그렇다면 이arr의 길이는 도대체 어떻게'규정된'것일까?
사실,arr의 길이는 3입니다.사실 자바에 있는 모든 수조는 몇 차원을 막론하고 모두 일차원 수조이다.예를 들어arr는 3개의 공간을 분배하고 각 공간에 1차원 그룹의 주소를 저장하면'2차원'수조가 된다.하지만 ARR의 길이는 3이다.

int[][] a=new int[3][];
System.out.println(a.length);//3
int[][] b=new int[3][5];
System.out.println(b.length);//3
자바에서 왜 String과 같은 Array 클래스를 정의하지 않았습니까?
수조도 대상이기 때문에 아래의 코드도 합법적이다.

Object obj = new int[10];
배열은 clone () 을 제외한 모든 Object에서 상속된 방법 (Java에서 배열의 상속 관계식) 을 포함합니다.왜 array류가 하나도 없어요?Java에는 Array가 없습니다.java 파일.간단한 설명은 그것이 숨겨졌다는 것이다. (주: 자바의 수조는 기본 데이터 형식과 약간 유사하고 내장 형식이며 실제 클래스는 그와 대응하지 않는다.)너는 이런 문제를 생각할 수 있다. 만약에 Array류가 있다면, 그것은 어떻게 될 것인가?그것은 모든 그룹 요소를 저장하기 위해 여전히 하나의 그룹이 필요할 것이다. 그렇지?따라서 Array 클래스를 정의하는 것은 좋은 생각이 아니다.(역자 주: 여기는 좀 꼬일 수 있습니다. 이치는 약간 닭이 알을 낳고 닭을 낳는 문제와 유사합니다. 비유도 적절하지 않을 수 있으니 독자 스스로 이해해 주십시오)
사실 우리는 다음 코드를 통해 수조의 클래스 정의를 얻을 수 있다.

int[] arr = new int[3];
System.out.println(arr.getClass());
출력:

class [I
"class [I"는 구성원 형식이 int의 그룹이라는 것을 의미합니다."class 대상이 실행될 때 형식의 서명
String에 length() 메서드가 있는 이유는 무엇입니까?
String 뒤에 있는 데이터 구조는char수 그룹이기 때문에 불필요한 속성을 정의할 필요가 없습니다. (이 속성은char수치에서 이미 제공되었기 때문입니다.)C와 달리 자바에서char의 수조는 문자열과 같지 않다. 비록 String의 내부 메커니즘은char수조가 실현했지만.(주: C 언어에는 String 클래스가 없으며 정의 문자열은 일반적으로 char string[6] = "hollis"; 형식을 사용합니다.
참고: char[]를 문자열로 바꾸려면 다음과 같은 방법이 있습니다.

char []s = {'a','b','c'};
String string1 = s.toString();
String string2 = new String(s);
String string3 = String.valueOf(s);
총결산
이상은 이 글의 전체 내용입니다. 본고의 내용이 여러분의 학습이나 Java 사용에 도움이 되었으면 좋겠습니다. 의문이 있으면 댓글을 남겨 주십시오.

좋은 웹페이지 즐겨찾기