java中intern().

本文介绍了如何利用Java中的intern()方法优化字符串比较的过程。通过将字符串存储在常量池中,可以显著提高字符串比较的速度,尤其是在大量字符串比较的情况下。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用intern()方法可以有效加快JVM进行比较的速度.
因为,在字符串比较来说==比较的是两个引用变量的地址
而equals方法(在String类中被复写)比较的是两个变量的实际值
==直接比较两个引用变量的值就可以了
而equals方法需要根据两个引用变量的地址去堆内存中判断两个引用变量的值是否相等
所以==的速度比equals 方法的速度快很多

然而 intern()方法的出现 使这种现象更加明显
intern()方法在被调用的时候 会在常量池里判断引用变量指向的内容在常量池中是否存在
如果存在就让引用变量直接指向常量池中的内容而不会再在堆内存中开盘空间存储该引用
变量指向的内容
s4=(s1+s2).intern();//(s1+s2)的实际值为"abcabc"调用intern()方法 该方法在常量池中
寻找是否已有"abcabc"存在,因为前面 String s3="abcabc";常量池中已经存在该内容
所以就将s4直接指向该内容 故s3==s4为true

也就是说 intern()方法使得字符串引用变量的指向更加明确 用常量池来管理这些内容
这样就大大提高了==比较的速度。
所以在大批的字符串变量比较中 要用到intern()方法 它可以更高效快捷的进行字符串变量比较

转载于:https://www.cnblogs.com/yangzhi/archive/2012/10/16/3576632.html

Java 中,`String.intern()` 是一个用于字符串对象的方法。它的作用是将字符串对象添加到字符串常量池中,并返回常量池中该字符串的引用。 具体含义如下: 1. 字符串常量池:Java 中的字符串常量池是一个特殊的内存区域,用于存储字符串字面值。当创建字符串时,如果字符串常量池中已经存在相同的字符串字面值,则会直接返回常量池中的引用,而不会创建新的对象。 2. `String.intern()` 方法:`intern()` 方法是 `String` 类提供的一个实例方法。调用它会检查当前字符串对象在常量池中是否存在。如果存在,则返回常量池中的引用;如果不存在,则将当前字符串对象添加到常量池中,并返回该引用。 使用 `String.intern()` 方法的主要目的是节省内存和提高性能。通过将字符串对象放入常量池中,可以重复使用相同的字符串字面值,减少内存占用,并且可以更快地比较字符串的相等性。 例如: ```java String str1 = new String("Hello"); String str2 = str1.intern(); System.out.println(str1 == str2); // false System.out.println(str1.equals(str2)); // true ``` 在上面的例子中,`str1` 是通过 `new String("Hello")` 创建的新字符串对象,而 `str2` 是通过 `str1.intern()` 返回的常量池中的引用。虽然它们的值相等,但它们是不同的对象,所以 `str1 == str2` 返回 `false`,而 `str1.equals(str2)` 返回 `true`。 需要注意的是,`String.intern()` 方法可能会在某些情况下导致一些性能问题和潜在的内存泄漏。因此,在使用时要注意评估场景和潜在的影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值