社区
Java
帖子详情
java String中的intern和String a="abc"的区别到对是什么
zhizi1988
2014-08-17 05:13:46
如题
String的intern()方法用于检查常量池中如果有等于此String对象的字符串存在,则直接返回常量池中的字符串对象,否则,将此String对象所包含的字符串添加到运行时常量池(字符串池)中,并返回此String对象的引用。
我们再回头看看String a="abc";,这行代码被执行的时候,JAVA虚拟机首先在字符串池中查找是否已经存在了值为"abc"的这么一个对象,它的判断依据是String类equals(Object obj)方法的返回值。如果有,则不再创建新的对象,直接返回已存在对象的引用;如果没有,则先创建这个对象,然后把它加入到字符串池中,再将它的引用返回。
因此我觉得没有什么区别啊。intern()方法能做的事用String a="abc"这种方法同样能做到。那么intern()方法存在的真正意义是什么?求大神点播,多谢。
...全文
436
5
打赏
收藏
java String中的intern和String a="abc"的区别到对是什么
如题 String的intern()方法用于检查常量池中如果有等于此String对象的字符串存在,则直接返回常量池中的字符串对象,否则,将此String对象所包含的字符串添加到运行时常量池(字符串池)中,并返回此String对象的引用。 我们再回头看看String a="abc";,这行代码被执行的时候,JAVA虚拟机首先在字符串池中查找是否已经存在了值为"abc"的这么一个对象,它的判断依据是String类equals(Object obj)方法的返回值。如果有,则不再创建新的对象,直接返回已
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
技术小黑屋
2014-12-22
打赏
举报
回复
关于使用intern的前提就是你清楚自己确实需要使用。比如,我们这里有一份上百万的记录,其中记录的某个值多次为美国加利福尼亚州,我们不想创建上百万条这样的字符串对象,我们可以使用intern只在内存中保留一份即可。其目的是节省内存占用,你可以查看一下这篇文章
http://droidyue.com/blog/2014/12/21/string-literal-pool-in-java/
快叫我java小菜鸟
2014-12-22
打赏
举报
回复
引用 2 楼 whos2002110 的回复:
一个在编译期,一个在运行期。 intern方法jdk7跟6也不一样
这个萌萌的小狗是正解
,编译器是无所谓的,但是运行期就需要intern来判断了,比如:String s1 = "ab";String s2 = "c";String s3 = "abc"; s3=="ab"+"c"是true因为编译器检测到常量池有abc这个对象,但是s3!=s1+s2,因为这是运行期的事,但是如果s3==(s1+s2).intern是true了,这就是intern要办的事,写jdk的都是大牛,怎么会写个没用的方法呢
humanity
2014-09-09
打赏
举报
回复
当我们在代码中用 "+" 拼接字符串时有一部分内容已经是常量(就是引号内的那些),但拼接出来的结果却不是常量,而是变量,因为当我们的逻辑确实想把它放入常量池时就用 intern,要知道这个过程本身是基于某个逻辑的结果,而引号里面的内容是在编译时就确定的因此不是动态的,我们很多时候明确地调用 intern 是基于性能考虑,在代码在编译时我们并不能确定将来运行这个程序的机器环境是什么样的,比如当是 Windows 时我们用"C:\Document and Settings\zhangsan\aaa.exe" 而在linux 下用 "/home/zhangsan/aaa.exe" 这个我们知道它是固定不这的,但不同的机器是不同的。因此我们的程序可以先确定机器类型后拼接出字符串然后 intern 冻结它。 所以说,这里面其实就是静态的和动态的区别。
whos2002110
2014-09-08
打赏
举报
回复
一个在编译期,一个在运行期。 intern方法jdk7跟6也不一样
blackze
2014-09-08
打赏
举报
回复
区别的话应该是没什么区别(没正式测过) 从别的角度来分析一下- - 举个例子 Integer i = 10; int i2 = 10; syso(i == i2); Integer和int是同一个类型吗? 那为什么会相等呢?因为自动装箱拆箱,它(可能是运行前编译,也可能是语言级支持比如类似于运算符重载我不太确定)把这个过程给简化了 比如说 String a = "a"+"b" 它编译后的结果不是两个字符串常量a和b而是一个字符串ab,因为编译优化了
Java
String
对象的经典问题
在
Java
中
,`
String
`类是一个非常重要的类,它提供了丰富的功能用于处理文本数据。`
String
`类是不可变的(immutable),这意味着一旦一个`
String
`对象被创建,它的内容就不能被改变。这种特性使得`
String
`类非常适合...
String
字符串比较1
Java
中
的字符串操作是一个重要的知识点,尤其在内存管理和字符串比较方面。在
Java
中
,字符串是不可变的,这意味着一旦创建,就不能更改。字符串的比较通常涉及到`==`和`.equals()`方法,以及`
intern
()`方法。 首先...
Java
中
关于
String
的全面解析
Java
中
的
String
是一个非常重要的类,它提供了两种创建方式和一种特殊的存储机制(
String
intern
pool),并且
String
类
中
声明了一个char[]数组和一个int类型的变量hash,用于存储字符串的内容和哈希值。
Java
String
对象使用方法详解
在
Java
中
,
String
对象是不可变的,它的值一旦创建便不能改变。下面我们来详细地解释
Java
String
对象使用方法详解。 首先,我们来看一个简单的例子: ```
java
public class Test { public static void main(
String
...
java
面试题122道基础题
欢迎大家下载
java
面试题,收集的一些面试方面的题 public static void main(
String
[] args) {
String
s=new
String
("
abc
"); System.out.println(s);
String
s1="
abc
";
String
s2=new
String
("
abc
"); System....
Java
51,408
社区成员
85,970
社区内容
发帖
与我相关
我的任务
Java
Java相关技术讨论
复制链接
扫一扫
分享
社区描述
Java相关技术讨论
java
spring boot
spring cloud
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章