`
神罗天征
  • 浏览: 18698 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java 字符串对象的处理(String s = new String("abc")生成多少对象的问题探讨)

阅读更多

public class StringTest {

public static void main(String[] args) {

String s1 = "a";//生成一个对象或者不生成对象(在字符串常量池中如果有a就不生成,如果没有就生成一个)

 

/* 生成两个或者一个对象(在堆内存生成一个对象b,在字符串常量池再生成一个b(如果常量池中已经有b的话,就不生成,此时只生成一个对象),

* 因为JVM的处理是:

* 在运行过程中生成的所有字符串都要在字符串常量池中有:

* 如果常量池中有了就不生成,如果没有就生成一个)

*/

String s2 = new String("b");

 

String s3 = s1+"b";

String s5 = "ab";

String s4 = "a"+"b";

 

/* 结果为false

* JVM的处理方式是:运行时候生成的对象都保存在堆内存

* s1是一个对象的引用,必须在运行的时候才能处理,所以s3指向的对象是在运行的时候生成的。

* 因为String在jdk中的定义是final的,所以s5这种直接定义字符串的方式其实相当于常量。常量初始化就就有固定值的,且编译以后直接存在字节码中。

* 常量字符串的处理方式是:JVM加载的时候,直接从字节码中获取字符串,然后放入字符串常量池中。

* 所以:s3指向的是堆内存中的对象,而s5指向的是字符串常量池中的对象,必然不是同一个对象,结果为false

*/

System.out.println(s3==s5);

 

 

/* 结果为true

* 因为字符串相当于常量,所以s4在经过编译以后(经过编译器优化),在字节码中也是直接存储为ab的,当jvm加载的时候处理方式和s5就是一样的。

* 所以他们都指向字符创常量池中的ab,结果为true

*/

System.out.println(s4==s5);

 

 

}

}

分享到:
评论

相关推荐

    String.txt

    String b =new String("abc"); //创建字符串方式2 System.out.println(a==b); //false,内存地址不相等 String c =new String("abc"); String d =new String("abc"); System.out.println(c==d...

    java字符串操作大全

    java字符串操作大全,适合初学者,浅显易懂 部JAVA字符串操作 2008-07-11 15:39:42| 分类: JAVA | 标签: |字号大中小 订阅 . JAVA字符串的方法 String a = "53c015"; //Integer.parseInt(s, radix) radix设置为...

    Java语言程序设计(第3版)第06章-字符串.pptx

    Java语言程序设计(第3版) 不能使用"=="号来比较字符串内容是否相等 比较内容是否相等: boolean equals(String str) boolean equalsIgnoreCase(String str) s1 s2 Hello Hello 字符串常量池 s1 s2 Hello Java语言...

    跟我学Java-day13-String和StringBuilder.pdf

    public boolean equals(String s) 比较两个字符串内容是否相同、区分大小写 public class StringDemo02 { public static void main(String[] args) { //构造方法的方式得到对象 char[] chs = {'a', 'b', 'c'}; ...

    浅析为什么a=”abc” 不等于 a=new String(“abc”)

    数字、字符串、布尔、null、undefined 属于原始资料类型,而Number、String、Boolean属于包装类型,通过new Number 创建的是包装类型的派生对象。所以两者是不等的。 直接赋值为基本类型之后的使用过程如下: 1、...

    **Java字符串的方法

    Java字符串的方法 1、length() 字符串的长度  例:char chars[]={'a','b'.'c'};  String s=new String(chars);  int len=s.length(); 2、charAt() 截取一个字符  例:char ch;  ch="abc".charAt(1); ...

    java 面对对象编程.pdf.zip

    面向对象基础 面向对象和面向过程的区别 成员变量与局部变量的区别 创建一个对象用什么运算符?对象实体与对象引用有何不同? 对象的相等和引用相等的区别 ...String s1 = new String("abc");这句话创建了几个

    Android中Split()字符串分割特殊用法案例详解

    Java:分割字符串不能写成split(“$”)//$为要分割的字符 Android:分割字符串需要加上中括号split(“[$]”)//$为要分割的字符 2.特殊用法–当split()分割字符串遇上特殊符号 案例分析 String str = abc|dfg; ...

    Java字符串连接原理

    StringBuffer/StringBuilder 表示的字符串对象可以直接进行修改 StringBuffer是线程安全的,他的方法都被synchronized修饰过,StringBuilder 是线程不安全的,通常效率要比StringBuffer要高一点

    完整版Java全套入门培训课件 Java基础 06-集合(共24页).pptx

    字符串是一个特殊的对象。 字符串一旦初始化就不可以被改变。 String str = “abc”; String str1 = new String(“abc”); 有什么区别 ? String类部分方法 char charAt(int index) int length() char[] ...

    底层的技术-----反射技术

    通过new对象 String str = new String(“abc”); String不可变特性:长度、内容 Private final char value[]; 内容不是真的不可变,可以通过反射的技术进行修改 反射 reflect 类是用来描述一组对象 反射机制...

    Java文件处理工具类--FileUtil

    * 读取文件并返回为给定字符集的字符串. * @param fileName * @param encoding * @return * @throws Exception */ public static String readFileAsString(String fileName, String encoding) throws ...

    java语言程序设计课后习题答案解析.doc

    答:首先创建一个字符串变量有两种方式: String str = new String<"abc">; String str = "abc"; 使用"= ="会因为创建的形式不同而产生不同的结果: String str1 = "abc"; String str2 = "abc"; System.out....

    C#中截取字符串的的基本方法详解

    分享几个经常用到的字符串的截取 string str="123abc456"; int i=3; 1 取字符串的前i个字符 str=str.Substring(0,i); // orstr=str.Remove(i,str.Length-i); 2 去掉字符串的前i个字符: str=str.Remove(0,i); //...

    为什么Java字符串是不可变对象?

    本文主要来介绍一下Java中的不可变对象,以及Java中String类的不可变性,那么为什么Java的String类是不可变对象?让我们一起来分析一下。  答案一:  流行的Java面试题之一是:什么是不可变对象(immutable ...

    超强JS(javascript)正则类第三版

    反回 字符串 * ============================================== * FindString(string,str);反回 布尔型 * ============================================== * Is(str,string); 反回 布尔型 * ...

    对String的深入理解

    字符串文字"abc"是一个String对象; 文字池[pool of literal strings]和堆[heap]中的字符串对象。 一、引用变量与对象:除了一些早期的Java书籍和现在的垃圾书籍,人们都可以从中比较清楚地学习到两者的区别。A aa...

    判断2个字符串是否含有相同的字符

    /*本版本处理方式为最通用的针对字符串大小未知情况的遍历——比如“字符串常量”——此时可用strlen()代替sizeof(),并引入<string.h>即可。 *但是因在纸上做题,在条件上做了简化————使用了sizeof()可确定...

    深入探讨JavaScript String对象

    String 字符串对象 1. 介绍  String 对象,对字符串进行操作,如:截取一段子串、查找字符串/字符、转换大小写等等。 2. 定义方式 2.1 new String(Value) 构造函数:返回一个内容为Value的String对象 参数: ①...

    .NET获取Html字符串中指定标签的指定属性的值

    .NET获取Html字符串中指定标签的指定属性的值 本代码为C#获取字符串中Html的指定标签的指定属性的值 ...要获取以上字符串中的img中的src或是a中的href等的值 GetHtmlAttr(tempstr,"img","src")这样就能获取到。

Global site tag (gtag.js) - Google Analytics