`
ttitfly
  • 浏览: 623277 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

java里的String

    博客分类:
  • java
阅读更多

1. java里的new 一个String对象时都会在堆内存里产生一个对象。

String str = new String("abc") 首先检查String Pool里有没有值为abc的对象,如果没有会先在String Pool里产生一个值为abc的对象,然后再在堆内存里拷贝一个值为abc的对象,然后把堆内存里的对象的地址赋值给str,如果String  Pool里有一个值为abc的对象,则直接从String Pool里的值拷贝一份值为abc的对象到堆内存,然后把堆内存里的对象的地址赋值给str.

String str = "abc' 这种方式创建的字符串,会首先看String Pool里有没有值为abc的对象,如果有,则直接把String Pool里abc对象的内存地址复制给str即可,如果没有则在String Pool里创建一个值为abc的对象,然后把创建的新的对象的内存地址赋值给str即可

java 代码
  1. public class Test {   
  2.   
  3.     public static void main(String[] args) {   
  4.         String str1 = new String("abc");   
  5.         String str2 = "abc";   
  6.         String str3 = new String("abc");   
  7.            
  8.         System.out.println(str1 == str2);   
  9.         System.out.println(str1 == str3);   
  10.         System.out.println(str2 == str3);   
  11.     }   
  12.   
  13. }   
  14.   
  15. 输出结果;   
  16. false  
  17. false  
  18. false  

 

2. String.intern() ,返回的是String Pool里相同值的对象的地址。

所以:

java 代码
  1. public class Test {   
  2.   
  3.     public static void main(String[] args) {   
  4.         String str1 = new String("abc");   
  5.         String str2 = "abc";   
  6.         String str3 = new String("abc");   
  7.            
  8.         System.out.println(str1 == str1.intern());//false   
  9.         System.out.println(str2 == str2.intern());//true   
  10.         System.out.println(str1.intern() == str3.intern());//true   
  11.     }   
  12.   
  13. }  

 

3  字符串用+号连接

如果+号两边都是字面常量的话,都会先去String Pool里找值相等的对象.如果没有找到则会在String Pool里创建一个新的对象。

如果+号两面有一个不是字面常量的话,则会在堆里创建一个新的对象。

java 代码
  1.   
  2. public class Test {   
  3.   
  4.     public static void main(String[] args) {   
  5.         String hello = "hello";   
  6.         String lo = "lo";   
  7.            
  8.         System.out.println(hello == "hel" + "lo");//+号两边都是字面常量,会在String Pool里创建,所以返回true   
  9.         System.out.println(hello == "hel" + lo);//+号右边不是字面常量,则会在堆内存里创建,所以返回false   
  10.     }   
  11.   
  12. }  
分享到:
评论

相关推荐

    java基础String类选择题练习题

    根据提供的信息,我们可以总结出这份Java基础String类选择题练习题主要聚焦于String及StringBuffer类的使用。尽管具体的题目内容未给出,但从所展示的信息中可以推断出该练习题集涵盖了以下几方面的知识点: ### 一...

    java中String类型转换方法.pdf

    Java 中 String 类型转换方法 Java 中 String 类型转换方法是一种常见的编程操作,涉及到各种数据类型之间的转换,包括整型、浮点型、长整型、浮点型等。本文将详细介绍 Java 中 String 类型转换方法的各种形式。 ...

    java String 使用详解

    Java String 使用详解 Java String 使用详解是 Java 编程语言中最基础也是最重要的一部分,对于 Java 程序员来说,了解 String 类的使用方法是必不可少的。本文将详细介绍 Java String 的使用方法,包括 String ...

    83.java中String构造方法.zip

    83.java中String构造方法.zip83.java中String构造方法.zip83.java中String构造方法.zip83.java中String构造方法.zip83.java中String构造方法.zip83.java中String构造方法.zip83.java中String构造方法.zip83.java中...

    85.java中String构造方法.zip

    85.java中String构造方法.zip85.java中String构造方法.zip85.java中String构造方法.zip85.java中String构造方法.zip85.java中String构造方法.zip85.java中String构造方法.zip85.java中String构造方法.zip85.java中...

    StringUtil.java

    java编程中对字符串的各种方式的处理,包括(空字符串处理、判断是否是空字符串 null和"" 都返回 true、 把string array or list用给定的符号symbol连接成一个字符串、 判定第一个字符串是否等于的第二个字符串中的某...

    java-string-similarity

    各种字符串相似度和距离算法的实现:Levenshtein,Jaro-winkler,n-Gram,Q-Gram,Jaccard索引,最长公共子序列编辑距离,余弦相似度......

    java里的string

    讲解java中的String和StringBuffer的基本应用

    86.java中String对象的特点.zip

    86.java中String对象的特点.zip86.java中String对象的特点.zip86.java中String对象的特点.zip86.java中String对象的特点.zip86.java中String对象的特点.zip86.java中String对象的特点.zip86.java中String对象的特点....

    java-string-similarity, 各种字符串相似性和距离算法.zip

    java-string-similarity, 各种字符串相似性和距离算法 java-string-similarity 实现不同字符串相似度和距离度量的库。 目前已经实现了许多算法( 包括Levenshtein编辑距离和 sibblings,jaro winkler,最长公共子序列...

    Java 之 String 类型

    在Java编程语言中,String类型扮演着至关重要的角色。它被广泛用于表示和操作文本,因为它是不可变的,这确保了字符串的安全性和效率。本文将深入探讨Java中的String类,包括其特性、构造方法、常用方法以及与其他...

    java字符串转String数组简单实例

    java字符串转String数组简单实例,简单但很实用

    小心String的陷阱——深入剖析Java中String的处理机制

    标题和描述均强调了在Java中处理`String`对象时可能遇到的陷阱,尤其是在理解和使用`String`的处理机制上。文章由天津工业大学软件工程专业的翁龙辉撰写,旨在深入剖析`String`在Java中的独特行为及其潜在的陷阱。...

    我们一起学Java之String

    Java中的String类是一个重要的数据类型,用于存储和操作字符串数据。String类的特点是不可变性,也就是说,一旦String对象被创建,其值就无法改变。这一特性对于Java内存管理有着重要影响,因为String对象会存储在...

    java中String_十六进制String_byte[]之间相互转换

    ### Java中String、十六进制String与byte[]之间的相互转换 在Java开发中,字符串(String)、十六进制表示的字符串以及字节数组(byte[])之间的转换是非常常见的需求,尤其是在处理网络通信、文件读写等场景下。...

    java中string和int型的相互转换.doc

    Java 中 String 和 int 类型的相互转换 Java 中 String 和 int 类型的相互转换是一个基本的数据类型转换操作。下面我们来详细介绍这两种类型的相互转换。 String 转换为 int 在 Java 中,将 String 类型转换为 ...

    Java中String判断值为null或空及地址是否相等的问题

    在Java编程中,字符串(String)是非常常见且重要的数据类型。本文主要讨论了如何正确判断Java中的String对象是否为null、空值("")以及它们的地址是否相等。在处理字符串时,了解这些概念对于避免程序出错至关重要。...

    Java中String类中的常用方法.TXT

    简单总结可以下Java中String类中的常用方法

    简单说说JAVA的String和byte[]的关系

    ### JAVA中String与byte[]的关系解析 在Java编程语言中,`String`对象与`byte[]`数组之间的转换是常见的操作之一。理解这两者之间的关系对于处理文本数据、网络通信及文件读写等任务至关重要。 #### 一、String与...

Global site tag (gtag.js) - Google Analytics