- Java数据类型概述
- 在Java中,数据类型分为基本数据类型和引用数据类型。基本数据类型包括整数类型(
byte、short、int、long)、浮点类型(float、double)、字符类型(char)和布尔类型(boolean)。这些基本数据类型在内存中有明确的存储方式,并且存储的是实际的值。
- 在Java中,数据类型分为基本数据类型和引用数据类型。基本数据类型包括整数类型(
- String的本质是引用数据类型
- 存储方式:
String在Java中是一个类,属于引用数据类型。当创建一个String对象时,实际上是在堆内存中分配了一块空间来存储字符串的值,而变量本身(在栈内存中)存储的是这个对象在堆内存中的引用地址。例如:String str = "Hello"; - 这里
str是一个引用变量,它指向存储在堆内存中的String对象,这个对象包含了字符序列"Hello"。
- 存储方式:
- 与基本数据类型的对比
- 可变性:基本数据类型的值是不可变的,一旦定义就不能改变。例如,一个
int类型的值不能在原内存位置上修改。而String对象是不可变的(immutable),这意味着一旦一个String对象被创建,它的值就不能被改变。当对String进行操作看起来像是修改了它的值时,实际上是创建了一个新的String对象。例如:String str1 = "Hello"; String str2 = str1 + " World"; - 这里
str1仍然指向原来的String对象"Hello",而str2指向一个新创建的包含"Hello World"的String对象。 - 内存管理:基本数据类型的变量在栈内存中直接存储其值,占用的内存空间大小是固定的,由数据类型本身决定(例如
int通常占用4个字节)。而String对象存储在堆内存中,其占用的内存空间大小取决于字符串的长度,并且需要进行垃圾回收(GC)来管理内存。当一个String对象不再被引用时,垃圾回收机制会在适当的时候回收它所占用的内存。 - 操作方法:基本数据类型有一系列简单的算术和逻辑运算操作符,如
+、-、*、/(对于数值类型)和&&、||、!(对于布尔类型)。而String类有自己丰富的方法,如length()用于获取字符串长度,substring()用于截取子字符串,indexOf()用于查找字符或子字符串在字符串中的位置等。
- 可变性:基本数据类型的值是不可变的,一旦定义就不能改变。例如,一个