1. 기본 데이터 유형
Java에는 8가지 기본 데이터 유형, 4가지 정수 유형(byte, short)이 있습니다. , int, long), 소수 유형 2개(float, double), 문자 유형 1개(char), 부울 유형 1개(boolean)
byte | 값 범위 | |
---|---|---|
byte#🎜🎜 ##🎜 🎜#1 | -2^7 ~ 2^7 - 1 | |
2 #🎜🎜 # | -2^15 ~ 2^15 - 1int | |
#🎜 🎜#- 2^31 ~ 2^31 - 1 | long | |
-2^63 ~ 2^ 63 - 1 |
(1바이트는 8비트 바이너리를 나타냄) float는 32비트, double은 64비트, char는 16비트, boolean은 1비트를 차지합니다. Java는 Object이기 때문에 -지향# 🎜🎜#은 언어이므로 이러한 8가지 기본 데이터 유형에는 Byte, Short, Integer, Long, Float, Double, Character 및 Boolean과 같은 해당 패키징 클래스가 있습니다. 이러한 8가지 기본 유형과 해당 포장 유형 간의 할당은 자동 박스 포장 및 언박싱을 통해 완료됩니다. Integer a = 1; // 基本数据类型int自动装箱为Integer包装类(实际上在编译时会调用Integer .valueOf方法来装箱)int b = a; // 自动拆箱(实际上会在编译调用intValue)그럼 new Integer(123) 와 Integer.valueOf(123) 의 차이점은 무엇인가요?
Integer a = new Integer(123);Integer b = new Integer(123); System.out.println(x == y); // falseInteger c = Integer.valueOf(123);Integer d = Integer.valueOf(123); System.out.println(z == k); // true 编译器会在自动装箱过程调用 Integer m = 123;Integer n = 123; System.out.println(m == n); // true 根据查看Integer类的源码发现,使用 public static Integer valueOf(int i) { if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); } 但是看下面的代码 Integer i1 = 128; Integer i2 = 128; System.out.println(i1 == i2); //false 发现返回的是false,这是因为在Integer中,缓存池的范围为: -128 ~ 127 private static class IntegerCache { static final int low = -128; static final int high; static final Integer cache[]; static { // high value may be configured by property int h = 127; String integerCacheHighPropValue = sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high"); if (integerCacheHighPropValue != null) { try { int i = parseInt(integerCacheHighPropValue); i = Math.max(i, 127); // Maximum array size is Integer.MAX_VALUE h = Math.min(i, Integer.MAX_VALUE - (-low) -1); } catch( NumberFormatException nfe) { // If the property cannot be parsed into an int, ignore it. } } high = h; cache = new Integer[(high - low) + 1]; int j = low; for(int k = 0; k < cache.length; k++) cache[k] = new Integer(j++); // range [-128, 127] must be interned (JLS7 5.1.7) assert IntegerCache.high >= 127; } private IntegerCache() {} } 2.String类型除了上面的八个基本数据类型,String类也是在写程序中最常用的一种类型。 String类被声明为final,所以它不可以被继承。其内部使用 char 数组存储数据,该数组被声明为 final,这意味着 value 数组初始化之后就不能再引用其它数组,并且 String 内部没有改变 value 数组的方法,因此可以保证 String 不可变。 public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /** The value is used for character storage. */ private final char value[]; String.intern() 使用 String.intern() 可以保证相同内容的字符串变量引用相同的内存对象。 下面示例中,s1 和 s2 采用 new String() 的方式新建了两个不同对象,而 s3 是通过 s1.intern() 方法取得一个对象引用,这个方法首先把 s1 引用的对象放到 String Pool(字符串常量池)中,然后返回这个对象引用。因此 s3 和 s1 引用的是同一个字符串常量池的对象。 String s1 = new String("aaa");String s2 = new String("aaa"); System.out.println(s1 == s2); // falseString s3 = s1.intern(); System.out.println(s1.intern() == s3); // true 如果是采用 “bbb” 这种使用双引号的形式创建字符串实例,会自动地将新建的对象放入 String Pool 中。 String s4 = "bbb";String s5 = "bbb"; System.out.println(s4 == s5); // true 在 Java 7 之前,字符串常量池被放在运行时常量池中,它属于永久代。而在 Java 7,字符串常量池被放在堆中。这是因为永久代的空间有限,在大量使用字符串的场景下会导致 OutOfMemoryError 错误。 那么知道String不可变性,那这样设计有什么好处呢? 1.字符串池的需要 字符串常量池(String intern pool) 是Java堆内存中一个特殊的存储区域, 当创建一个String对象时。假如此字符串值已经存在于常量池中,则不会创建一个新的对象,而是引用已经存在的对象。 2.允许String对象缓存HashCode Java中String对象的哈希码被频繁地使用, 比如在hashMap 等容器中。 字符串不变性保证了hash码的唯一性,因此可以放心地进行缓存。这也是一种性能优化手段,意味着不必每次都去计算新的哈希码 3.安全性 String被许多的Java类(库)用来当做参数,例如 网络连接地址URL,文件路径path,还有反射机制所需要的String参数等,假若String不是固定不变的,将会引起各种安全隐患。 boolean connect(string s){ if (!isSecure(s)) { throw new SecurityException(); } // 如果在其他地方可以修改String,那么此处就会引起各种预料不到的问题/错误 causeProblem(s); } 4.线程安全 String 不可变性天生具备线程安全,可以在多个线程中安全地使用。 这篇文章有详细的介绍。 String是不可变,那么有没有可变的字符串呢? 在Java中提供了StringBuffer 和 StringBuilder,是可变的。在String中,定义的是一个final字符数组,所以不可变,而StringBuffer和StringBuilder因为继承了AbstractStringBuilder,根据源码可看出是一个可变的字符数组。 public final class StringBuilder extends AbstractStringBuilder implements java.io.Serializable, CharSequence{ AbstractStringBuilder(int capacity) { value = new char[capacity]; } /** * The value is used for character storage. */ char[] value; 根据源码还可以知道,StringBuffer是线程安全的,其中的方法都被 컴파일러는 오토박싱 프로세스 중에 Integer 클래스의 소스코드에 따르면 false가 반환되는 것을 알 수 있습니다. 이는 Integer에서 캐시 풀 범위가 -128 ~ 127#🎜🎜이기 때문입니다. # rrreee 2.String 유형위의 8가지 기본 데이터 유형 외에도 String 클래스는 프로그램 작성에 가장 일반적으로 사용되는 유형이기도 합니다. String 클래스는 final로 선언되어 상속될 수 없습니다. 내부적으로 char 배열을 사용하여 데이터를 저장하고 배열을 final로 선언하는데, 이는 값 배열이 초기화된 후에는 다른 배열을 참조할 수 없으며, 값 배열을 변경할 수 있는 String의 내부 메서드가 없으므로 String 불변성을 보장할 수 있습니다.rrreee ![]() 동기화 에 의해 수정된다는 것도 알 수 있습니다. #🎜🎜##🎜🎜#관련 기사: #🎜🎜##🎜🎜##🎜🎜#JavaScript 기본 데이터 유형_기본 지식#🎜🎜##🎜🎜##🎜🎜##🎜🎜# 및 스트림#🎜🎜##🎜🎜##🎜🎜#관련 동영상: #🎜🎜##🎜🎜#
|
위 내용은 Java 기본 검토: 기본 데이터 유형 및 문자열 유형의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

이 기사에서는 Java 프로젝트 관리, 구축 자동화 및 종속성 해상도에 Maven 및 Gradle을 사용하여 접근 방식과 최적화 전략을 비교합니다.

이 기사에서는 Maven 및 Gradle과 같은 도구를 사용하여 적절한 버전 및 종속성 관리로 사용자 정의 Java 라이브러리 (JAR Files)를 작성하고 사용하는 것에 대해 설명합니다.

이 기사는 카페인 및 구아바 캐시를 사용하여 자바에서 다단계 캐싱을 구현하여 응용 프로그램 성능을 향상시키는 것에 대해 설명합니다. 구성 및 퇴거 정책 관리 Best Pra와 함께 설정, 통합 및 성능 이점을 다룹니다.

이 기사는 캐싱 및 게으른 하중과 같은 고급 기능을 사용하여 객체 관계 매핑에 JPA를 사용하는 것에 대해 설명합니다. 잠재적 인 함정을 강조하면서 성능을 최적화하기위한 설정, 엔티티 매핑 및 모범 사례를 다룹니다. [159 문자]

Java의 클래스 로딩에는 부트 스트랩, 확장 및 응용 프로그램 클래스 로더가있는 계층 적 시스템을 사용하여 클래스로드, 링크 및 초기화 클래스가 포함됩니다. 학부모 위임 모델은 핵심 클래스가 먼저로드되어 사용자 정의 클래스 LOA에 영향을 미치도록합니다.


핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

WebStorm Mac 버전
유용한 JavaScript 개발 도구

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

SublimeText3 Linux 새 버전
SublimeText3 Linux 최신 버전

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기
