彻底理解Java中的String类

对String类的理解网上有很多的资料,个人觉得很多都是错误的,错误的解释危害性更大。所以为了解释清楚,就来看代码,代码运行出的结果才是最具有说服力的。说明:以下都是个人的理解,欢迎指正。


public class StringTest {
public static void main(String[] args) {
String str1 = new String("abc");

String str2 = "abc";

if (str1 == str2) {
System.out.println("str1 == str2");
} else {
System.out.println("str1 != str2");
}

String str3 = "abc";
if (str2 == str3) {
System.out.println("str2 == str3");
} else {
System.out.println("str2 != str3");
}

str1 = str1.intern();

if (str1 == str2) {
System.out.println("str1 == str2");
} else {
System.out.println("str1 != str2");
}

String str4 = new String("abc");
str4 = str4.intern();

if (str1 == str4) {
System.out.println("str1 == str4");
} else {
System.out.println("str1 != str4");
}
}

}


运行结果:

str1 != str2
str2 == str3
str1 == str2
str1 == str4


看看运行结果后,给出我自己的理解说明:

1、String有一个所谓的String pool,这是一个什么东西呢,我理解是它是[color=red]堆(heap)上特殊的一个空间[/color](我叫它[color=red]特殊堆[/color])。注意它也是在堆上。

2、产生String类型的对象有两种方法,那么这两种方法有什么区别呢?我的理解是String str = “abc”是先用equals方法(String类覆盖了equals方法)判断这个特殊堆(String pool)是否有abc,有则将原来在栈中指向abc的引用赋值给str,否则就在这个特殊堆(String pool)上创建一个abc对象。String str2 = new String("abc")则是在[color=red]普通堆[/color]上创建abc对象。所以str和str2是指向不同的对象,它们是不同的。

3、String有个intern()方法,这个方法是个本地方法,当用String str2 = new String("abc")来创建对象时,它相当于告诉JVM,我这个abc对象是放在[color=red]特殊堆(String pool)[/color]上的。所以第三个打印结果是相等的。

4、需要注意的一点:String是final类,它是恒定类,一旦创建就无法改变,所以用intern()方法是重新在String pool中创建了一个新的对象。

5、String类有一个伴随类StringBuffer,需要了解它们之间的区别请google之。
三维建模技术借助先进的像处理手段,将二维影像转化为立体空间数据。在多种实现路径中,双摄像头视觉方案与编码光投影技术具有代表性。前者通过布置两个成像单元从不同方位采集画面,依据视差原理与空间几何关系推算深度数据;后者则向目标表面投射特定光栅,通过解析光栅形变反推三维轮廓。相位偏移法作为光栅技术的重要分支,采用多步渐进式光场调制策略,通过记录连续相位变化获取亚像素级三维信息。同步采用的互补二进制编码机制,通过优化光强分布模式有效解决相位跳变问题,显著提升重建数据的连续性。 成像系统的参数标定是三维数据生成的基础环节,需通过专用算法确定镜头焦距、像主点坐标及光学畸变系数等核心参数。立体校正则依据双相机空间几何关系,对采集像进行投影变换,使对应像点分布于同一水平扫描线上,大幅降低立体匹配复杂度。在光栅系统中,相位对齐技术通过建立像素级相位映射关系,将二维相位场转换为三维坐标;而在立体视觉中,视差分析通过比对双视对应像素偏移量,构建深度映射矩阵。最终通过点云融合算法,将离散空间坐标整合为连续曲面模型,该技术体系在工业检测、数字娱乐及沉浸式交互等领域具有重要应用价值。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值