Java java지도 시간 기본 유형과 Java의 참조 및 문자열의 불변성

기본 유형과 Java의 참조 및 문자열의 불변성

Sep 11, 2024 am 06:43 AM

Java에는 기본 요소와 비원시 요소(참조라고도 함)라는 두 가지 유형의 데이터(또는 변수)가 있습니다.

기본 유형은 JVM(Java Virtual Machine)이 관리하는 임시 및 단기 저장 메모리인 스택에 리터럴 값이 저장되어 있습니다. [여기에서 메모리 유형에 대해 자세히 알아보세요.]

기본 변수는 네 가지 그룹으로 나뉩니다.

1. 정수 유형: 정수를 저장하는 데 사용됩니다(소수 부분 없음). 바이트, 짧은, int, 긴 것입니다. Long은 구별을 위해 숫자 끝에 "L" 또는 "l" 문자를 붙입니다.

2. 부동 소수점 유형:: 소수 부분(실수)이 포함된 숫자를 저장하는 데 사용됩니다. 그것들은 플로트(float), 더블(double)입니다. 플로트는 구별을 위해 숫자 끝에 "F" 또는 "f" 문자가 있습니다.

3. 문자 유형: 단일 문자(예: 문자, 숫자 또는 기호)를 저장하는 데 사용됩니다: char. 이중 "" 대신 작은따옴표 ''로 초기화됩니다.

4. 부울 유형: 논리값을 저장하는 데 사용됩니다(true 또는 false): bool

"기본값" 외에 각 유형이 갖는 값의 범위는 아래 표를 참조하세요.

Tipos primitivos vs referências em Java e a imutabilidade das Strings
과학적인 형식에서 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 < 10){
            j = 5;
        }

        System.out.println(j);
    }

이 예에서는 "2 < 10"이 "true"를 반환한다는 것을 알고 있음에도 불구하고 프로세스 중에 번역한 코드를 절대 실행하지 않는 컴파일러는 조건이 true이고 기본 변수가 "j"는 항상 초기화됩니다. 이렇게 하면 코드를 실행하려고 할 때 "오류: 변수 j가 초기화되지 않았을 수 있습니다."라는 컴파일 오류가 나타납니다.

메모리 주소

Java의 두 번째 데이터 유형은 참조입니다. 이러한 변수는 기본 유형에서 발생하는 것처럼 값을 직접 저장하는 대신 참조, 즉 객체의 메모리 주소를 저장합니다. 이 저장은 힙 메모리에서 발생합니다.

참조 유형은 일반적으로 클래스, 인터페이스, 열거형 및 객체입니다.

여기에 부록이 있습니다. 우리 코드에서 널리 사용하는 문자열은 기본 유형이 아닌 클래스입니다. Java의 클래스 명명 규칙과 마찬가지로 이름도 대문자로 표시됩니다.

String에는 저장된 텍스트의 크기를 반환하는 length(), 텍스트에 있는 문자의 인덱스를 반환하는 charAt(int index) 또는 substring(int startIndex, int)와 같은 메서드도 있습니다. endIndex), 문자열 조각을 반환합니다.

하지만 원시 데이터를 더 쉽게 조작하고 싶다면 Java도 이를 허용합니다. 이를 위해 기본 유형을 사용하는 일련의 내장 메서드가 이미 제공되는 Wrapper 클래스가 있습니다.

래퍼는 기본적으로 기본 변수와 이름이 동일하지만 첫 글자는 대문자로 표시됩니다.

  • 바이트 단위
  • 반바지에는 반바지
  • 정수를 int로
  • 길고 길다
  • 떠서 떠다
  • 더블 대 더블
  • 채팅할 캐릭터
  • 부울 대 부울
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 + " é menor que " + num2);
        } else if (resultadoComparacao > 0) {
            System.out.println(num1 + " é maior que " + num2);
        } else {
            System.out.println(num1 + " é igual a " + num2);
        }
    }
}

이 예제 코드에서는 int 래퍼를 사용하여 문자열을 숫자(Integer.parse)로 변환한 다음 이를 다른 숫자(Integer.compare)와 비교합니다.

그러나 String에는 다른 클래스에 없는 특수성이 있습니다. 그녀는 불변합니다.

다음 기본 예를 통해 생각해 보겠습니다.

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 變數保持不可變。這意味著,一旦定義, String 物件的值就不能被另一個物件間接更改。

因此,在範例中,我們不會更改 text1 先前引用的物件的值(因為 String 是不可變的)。相反,我們建立一個值為「Weird」的新 String 對象,並使 text1 指向這個新物件。 Text2 仍將指向原始的「Hello」對象,這就是它保留值「Hello」的原因。

簡而言之,為字串指派新值不會修改現有物件的值,它只是更改對新物件的參考。

自訂類別的對象,例如 TestClass,是可變的。 test1 和 test2 參考都指向同一個對象,因此更改其中一個對象的狀態會影響另一個對象。

위 내용은 기본 유형과 Java의 참조 및 문자열의 불변성의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제

PHP 튜토리얼
1596
276
JDBC로 Java의 거래를 처리하는 방법은 무엇입니까? JDBC로 Java의 거래를 처리하는 방법은 무엇입니까? Aug 02, 2025 pm 12:29 PM

JDBC 트랜잭션을 올바르게 처리하려면 먼저 자동 커밋 모드를 끄고 여러 작업을 수행 한 다음 결과에 따라 커밋 또는 롤백을 수행해야합니다. 1. 트랜잭션을 시작하려면 Conn.SetAutoCommit (False)에게 전화하십시오. 2. 인서트 및 업데이트와 같은 여러 SQL 작업을 실행합니다. 3. 모든 작업이 성공한 경우 Conn.commit ()에게 전화하여 데이터 일관성을 보장하기 위해 예외가 발생하면 Conn.Rollback ()에게 전화하십시오. 동시에, 재 시도는 리소스를 관리하고, 예외를 올바르게 처리하고, 연결 유출을 피하기 위해 긴밀한 연결을 사용하는 데 사용해야합니다. 또한 연결 풀을 사용하고 부분적으로 롤백을 달성하기 위해 저장 포인트를 설정하고 성능을 향상시키기 위해 거래를 가능한 한 짧게 유지하는 것이 좋습니다.

Jakarta EE와 함께 Java에서 편안한 API를 구축합니다 Jakarta EE와 함께 Java에서 편안한 API를 구축합니다 Jul 30, 2025 am 03:05 AM

setupamaven/gradleProjectwithJax-rsddependencies likejersey; 2. createarestresourceUsingAnnotationsSuchas@pathand@get;

Java의 캘린더 작업 방법은 무엇입니까? Java의 캘린더 작업 방법은 무엇입니까? Aug 02, 2025 am 02:38 AM

이전 날짜 및 달력 클래스를 대체하기 위해 Java.Time 패키지의 클래스를 사용하십시오. 2. LocalDate, LocalDateTime 및 LocalTime을 통해 현재 날짜와 시간을 얻으십시오. 3. () 메소드를 사용하여 특정 날짜와 시간을 만듭니다. 4. 플러스/마이너스 방법을 사용하여 시간을 불안정하게 늘리고 감소시킵니다. 5. ZonedDateTime 및 Zoneid를 사용하여 시간대를 처리하십시오. 6. DateTimeFormatter를 통해 형식 및 구문 분석 날짜 문자열; 7. 필요한 경우 이전 날짜 유형과 호환되도록 즉시 사용하십시오. 현대 Java의 날짜 처리는 명확하고 불변의 선형을 제공하는 Java.Timeapi 사용에 우선 순위를 부여해야합니다.

스프링과 기체와 함께 Java의 의존성 주입 마스터 링 스프링과 기체와 함께 Java의 의존성 주입 마스터 링 Aug 01, 2025 am 05:53 AM

의존성 (DI) ISADESIGNPATTORNWHEREWHEDROUDIVESTESTESTETESTERGROWCONSTRUCTOR, 2.SPRINGFRAMEWWERTHUSENONTATIONS와 같은@autowiredWithjava 기반 CONCUTTATIONS LIKERWITHCONSTRUCTOR, ORFIELDINGESS.2.SPRINGFRAMEWWERTHUSENNOTATIONS

Java 프레임 워크 비교 : Spring Boot vs Quarkus vs Micronaut Java 프레임 워크 비교 : Spring Boot vs Quarkus vs Micronaut Aug 04, 2025 pm 12:48 PM

Pre-FormancetArtUptimeMoryUsage, Quarkusandmicronautleadduetocompile-timeprocessingandgraalvsupport, withquarkusoftenperforminglightbetterine serverless sinarios.2.thyvelopecosyste,

Java 성능 최적화 및 프로파일 링 기술 Java 성능 최적화 및 프로파일 링 기술 Jul 31, 2025 am 03:58 AM

성능 분석 도구를 사용하여 병목 현상을 찾고 개발 및 테스트 단계에서 VisualVM 또는 JProfiler를 사용하며 생산 환경에서 Async-Profiler에 우선 순위를 부여합니다. 2. 객체 생성을 줄이고, 개체를 재사용하고, StringBuilder를 사용하여 문자열 스 플라이 싱을 교체하고, 적절한 GC 전략을 선택하십시오. 3. 장면에 따라 수집 사용을 최적화하고 초기 용량을 선택하고 사전 설정합니다. 4. 동시성 최적화, 동시 컬렉션을 사용하고, 잠금 세분화를 줄이고, 스레드 풀을 합리적으로 설정하십시오. 5. JVM 매개 변수 조정, 합리적인 힙 크기 및 저도 가비지 수집기를 설정하고 GC 로그를 활성화합니다. 6. 코드 레벨에서 반사를 피하고, 래퍼 클래스를 기본 유형으로 바꾸고, 초기화를 지연시키고, 최종 및 정적을 사용하십시오. 7. JMH와 결합 된 지속적인 성능 테스트 및 모니터링

Java 프로젝트 관리를위한 Maven에 대한 개발자 안내서 Java 프로젝트 관리를위한 Maven에 대한 개발자 안내서 Jul 30, 2025 am 02:41 AM

Maven은 Java 프로젝트 관리 및 건설을위한 표준 도구입니다. 답은 POM.XML을 사용하여 프로젝트 구조, 종속성 관리, 건설 라이프 사이클 자동화 및 플러그인 확장을 표준화한다는 사실에 있습니다. 1. pom.xml을 사용하여 groupId, artifactid, 버전 및 종속성을 정의하십시오. 2. MVNClean, 컴파일, 테스트, 패키지, 설치 및 배포와 같은 마스터 코어 명령; 3. 종속성 버전 및 충돌을 관리하기 위해 종속성 관리 및 제외를 사용합니다. 4. 다중 모듈 프로젝트 구조를 통해 대규모 응용 프로그램을 구성하고 부모 POM에 의해 균일하게 관리됩니다. 5.

JVM (Java Virtual Machine) 내부 이해 JVM (Java Virtual Machine) 내부 이해 Aug 01, 2025 am 06:31 AM

thejvmenablesjava의 "WriteOnce, Runynywhere"기능은 비록 excodecodethroughfourmaincomponents : 1. theclassloadersubsystemloads, 링크, 및 intinitializes.classfilesusingbootsprap, extension, andapplicationclassloaders, ensuringsecureandlazyclasloa

See all articles