Java에는 기본 요소와 비원시 요소(참조라고도 함)라는 두 가지 유형의 데이터(또는 변수)가 있습니다.
기본 유형에는 JVM(Java Virtual Machine)이 관리하는 임시 및 단기 저장 메모리인 스택에 리터럴 값이 저장되어 있습니다. [여기에서 메모리 유형에 대해 자세히 알아보세요]
기본 변수는 네 가지 그룹으로 나뉩니다.
1. 정수 유형: 정수를 저장하는 데 사용됩니다(소수 부분 없음). 바이트, 짧은, int, 긴 것입니다. Long은 구별을 위해 숫자 끝에 "L" 또는 "l" 문자가 있습니다.
2. 부동 소수점 유형: : 소수 부분(실수)이 포함된 숫자를 저장하는 데 사용됩니다. 그것들은 플로트(float), 더블(double)입니다. 부동소수점에는 구별을 위해 숫자 끝에 문자 "F" 또는 "f"가 있습니다.
3. 문자 유형: 단일 문자(예: 문자, 숫자 또는 기호)를 저장하는 데 사용됩니다: char. 이중 "" 대신 작은따옴표 ''로 초기화됩니다.
4. 부울 유형: 논리값(true 또는 false)을 저장하는 데 사용: bool
"기본값" 외에 각 유형이 지원하는 값 범위는 아래 표를 참조하세요.
과학적인 형식에서 E는 지수를 나타냅니다. 예를 들어 1.23E 10은 1.23 x 10^10
기본값은 무엇인가요? 변수가 초기화되지 않은 경우 변수가 가정하는 값입니다. 그러나 이 값을 가정하려면 전역 또는 상수(최종)여야 합니다.
public final boolean isTrue;
이 코드 줄에서는 "isTrue" 변수가 초기화되지 않았지만 컴파일러는 부울 변수에 대해 기본값 "false"를 고려하므로 오류를 표시하지 않습니다.
여기서 중요한 경고가 있습니다. 변수의 범위가 로컬인 경우, 즉 함수 내에서 선언된 경우 프로그래머는 변수에 값을 할당해야 합니다. 그렇지 않으면 컴파일 오류가 발생합니다.
public void teste(){ int i = 2; int j; if (i이 예에서 "2
메모리 주소
Java의 두 번째 데이터 유형은 참조입니다. 이러한 변수는 기본 유형에서 발생하는 것처럼 값을 직접 저장하는 대신 참조, 즉 객체의 메모리 주소를 저장합니다. 이 저장은 힙 메모리에서 발생합니다.
참조 유형은 일반적으로 클래스, 인터페이스, 열거형 및 객체입니다.
여기에 부록이 있습니다. 우리 코드에서 널리 사용하는 문자열은 기본 유형이 아닌 클래스입니다. Java의 클래스 명명 규칙과 마찬가지로 이름도 대문자로 표시됩니다.
문자열에는 저장된 텍스트의 크기를 반환하는 length(), 텍스트에 있는 문자의 인덱스를 반환하는 charAt(int index) 또는 substring(int startIndex, int)와 같은 메서드도 있습니다. endIndex), 문자열 조각을 반환합니다.
그러나 원시 데이터를 더 쉽게 조작하려는 경우 Java도 이를 허용합니다. 이를 위해 기본 유형을 사용하는 일련의 내장 메소드가 이미 제공되는 Wrapper 클래스가 있습니다.
래퍼는 기본적으로 기본 변수와 이름이 동일하지만 첫 글자는 대문자로 표시됩니다.
public class WrapperExample { public static void main(String[] args) { String numeroStr = "123"; Integer num1 = Integer.parseInt(numeroStr); Integer num2 = 200; int resultadoComparacao = Integer.compare(num1, num2); if (resultadoComparacao 0) { System.out.println(num1 " é maior que " num2); } else { System.out.println(num1 " é igual a " num2); } } }
이 예제 코드에서 int 래퍼는 문자열을 숫자(Integer.parse)로 변환한 다음 이를 다른 숫자(Integer.compare)와 비교하는 데 사용됩니다.
그러나 문자열에는 다른 클래스에 없는 특수성이 있습니다. 불변입니다.
이 기본 예를 통해 생각해 보겠습니다.
public class Main { public static void main(String[] args) { String text1 = "Hello"; String text2 = text1; System.out.println(text1); //output: Hello System.out.println(text2); //output: Hello text1 = "Weird"; System.out.println(text1); //output: Weird System.out.println(text2); //output: Hello text2 = "World"; System.out.println(text1); //output: Weird System.out.println(text2); //output: World TestClass test1 = new TestClass("propertyValue"); TestClass test2 = test1; System.out.println(test1.getProperty()); //output: propertyValue System.out.println(test2.getProperty()); //output: propertyValue test2.setProperty("newValue"); System.out.println(test1.getProperty()); //output: newValue System.out.println(test2.getProperty()); //output: newValue } }
이 경우 문자열 "text2"가 "text1"을 가리키더라도 "text2"의 변경 사항은 "text1"의 변경 사항을 반영하지 않습니다. 이제 "test1"을 가리키는 객체 "test2"의 속성이 변경되면 이 변경 사항이 "test1"에도 반영됩니다.
안녕하세요, 그런데 참조 변수는 리터럴 값 대신 메모리 주소를 저장하지 않나요? 네, 저장해요. Java 언어 개발자는 문자열 변수를 불변으로 두기로 결정했습니다. 즉, 일단 설정된 String 객체의 값은 다른 객체에 의해 간접적으로 변경될 수 없습니다.
따라서 이 예에서는 text1이 이전에 참조한 객체의 값을 변경하지 않습니다(String은 변경할 수 없으므로). 대신, "Weird" 값을 가진 새로운 String 객체를 생성하고 text1이 이 새로운 객체를 가리키도록 만듭니다. 반면 text2는 여전히 원래 "Hello" 개체를 가리키며 이것이 "Hello" 값을 유지하는 이유입니다.
간단히 말하면, 문자열에 새 값을 할당해도 기존 객체의 값은 수정되지 않고 새 객체에 대한 참조만 변경됩니다.
TestClass와 같은 사용자 정의 클래스의 개체는 변경 가능합니다. test1 및 test2 참조는 모두 동일한 개체를 가리키므로 둘 중 하나의 상태를 변경하면 다른 개체에도 반영됩니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3