JAVA对象
2021-04-07 10:00:31 30 举报
AI智能生成
java对象, 深浅拷贝, String对象
作者其他创作
大纲/内容
对象类型
基本数据类型对象
基本数据类型都是直接存储在内存中的栈上的,数据本身的值就是存储在栈空间里面
java的基本数据类型为什么不创建对象?
基本对象放在栈中, 读写速度更快
基本对象放在栈中, 读写速度更快
引用数据类型对象
引用是存储在栈上的,而对象本身的值存储在堆上的
不论是基本数据类型还是引用类型,他们都会先在栈中分配一块内存,
对于基本类型来说,这块区域包含的是基本类型的内容;
而对于引用类型来说,这块区域包含的是指向真正内容的指针,真正的内容被手动的分配在堆上。
对于基本类型来说,这块区域包含的是基本类型的内容;
而对于引用类型来说,这块区域包含的是指向真正内容的指针,真正的内容被手动的分配在堆上。
基本数据类型
byte -- 8位、有符号的整数
short -- 16 位、有符号的整数
int -- 32位、有符号的整数
long -- 64 位、有符号的整数
float -- 单精度、32位旳浮点数
double -- 双精度、64 位旳浮点数
boolean -- 1位, true/false
char -- 16 位 Unicode 字符
深浅拷贝
浅拷贝
拷贝对象时, 只对基础数据类型进行拷贝, 没对引用数据对象进行拷贝, 只传递了引用
深拷贝
拷贝对象时, 不但对基础数据类型进行拷贝, 也对引用对象进行拷贝(生产新的对象, 且复制其内的成员变量)
java中的clone()
java中利用clone()进行拷贝,
如果一个对象内部只有基本数据类型,那用 clone() 方法获取到的就是这个对象的深拷贝,
而如果其内部还有引用数据类型,那用 clone() 方法就是一次浅拷贝的操作。
如果一个对象内部只有基本数据类型,那用 clone() 方法获取到的就是这个对象的深拷贝,
而如果其内部还有引用数据类型,那用 clone() 方法就是一次浅拷贝的操作。
String对象
String strA = "abc";
String strB = "abc";
strA == strB -> true
String strB = "abc";
strA == strB -> true
1. 常量池中查找“123”的指针
2. 如果在常量池中未能找到“123”的指针,则在堆中分配“123”的内存空间,把地址保存到常量池中,并把这个地址赋值给String型指针strA
3. 如果在常量池中找到“123”的指针,说明堆中已经存在“123”的实体,因为常量表示一个不可变的对象,所以,没有必要再创建新的实例,直接把常量池中的指针内容赋值给String型指针strA
String strA = new String("123");
String strB = new String("123");
strA == strB -> false
String strB = new String("123");
strA == strB -> false
1. new String()会在堆中创建一个新的String实体,并深度拷贝“123”的内容
2. 返回新的String实体的地址,赋值给指针strA
String不可修改性
字符串常量
String内部定义为一个final char[], 因此每次对字符串的操作实际上都会另外分配分配一个新的常量数组空间
StringBuffer
字符串变量(线程安全)
每个StringBuffer对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量
StringBuilder
字符串变量(非线程安全)
每个StringBuilder 对象都有一定的缓冲区容量,当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量
0 条评论
下一页