`
Java-primer
  • 浏览: 50310 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

String a = new String("b");到底是几个对象?

阅读更多
String  a  =  new  String("b");到底是几个对象? 

哈哈,要理解这个,就要知道string类的工作原理。  

你知道在java中除了8中基本类型外,其他的都是类对象以及其引用。所以   "xyz   "在java中它是一个String对象.对于string类对象来说他的对象值是不能修改的,也就是具有不变性。  

看:  

String       s=   "Hello   ";  

s=   "Java   ";  

String       s1=   "Hello   ";  

String       s2=new       String(   "Hello   ");  

啊,s所引用的string对象不是被修改了吗?之前所说的不变性,去那里了啊?  

你别着急,让我告诉你说发生了什么事情:  

在jvm的工作过程中,会创建一片的内存空间专门存入string对象。我们把这片内存空间叫做string池。  

String       s=   "Hello   ";当jvm看到   "Hello   ",在string池创建string对象存储它,并将他的引用返回给s。  

s=   "Java   ",当jvm看到   "Java   ",在string池创建新的string对象存储它,再把新建的string对象的引用返回给s。而原先的   "Hello   "仍然在string池内。没有消失,他是不能被修改的。  

所以我们仅仅是改变了s的引用,而没有改变他所引用的对象,因为string对象的值是不能被修改的。  

String       s1=   "Hello   ";jvm首先在string池内里面看找不找到字符串   "Hello   ",找到,返回他的引用给s1,否则,创建新的string对象,放到string池里。这里由于s=   "Hello   "了,对象已经被引用,所以依据规则s和s1都是引用同一个对象。所以       s==s1将返回true。(==,对于非基本类型,是比较两引用是否引用内存中的同一个对象)  

String       s2=String(   "Hello   ");jvm首先在string池内里面看找不找到字符串   "Hello   ",找到,不做任何事情,否则,创建新的string对象,放到string池里面。由于遇到了new,还会在内存上(不是string池里面)创建string对象存储   "Hello   ",并将内存上的(不是string池内的)string对象返回给s2。所以s==s2将返回false,不是引用同一个对象。  

好现在我们看题目:  

String       s       =       new       String(   "xyz   ");  

首先在string池内找,找到?不创建string对象,否则创建,       这样就一个string对象  

遇到new运算符号了,在内存上创建string对象,并将其返回给s,又一个对象  

所以总共是2个对象
分享到:
评论

相关推荐

    String s = new String(” a “) 到底产生几个对象?

    上图红色的这3个箭头,对于通过new产生一个字符串(”宜春”)时,会先去常量池中查找是否已经有了”宜春”对象,如果没有则在常量池中创建一个此字符串对象,然后堆中再创建一个常量池中此”宜春”对象的拷贝对象。...

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

    看了很多书,问了好几个大神,其实自己还是稀里糊涂的。这里记录一下,备查。 在js中,区分原始资料类型和包装类型。数字、字符串、布尔、null、undefined 属于原始资料类型,而Number、String、Boolean属于包装类型...

    String s = new String('a ') 到底产生几个对象

    主要介绍了String s = new String(" a ") 到底产生几个对象,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    JAVA面试题String产生了几个对象

    主要介绍了JAVA面试题 String s = new String("xyz");产生了几个对象?,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    Java问题宝典2012版

    37、下面这条语句一共创建了多少个对象:String s="a"+"b"+"c"+"d"; 26 38、try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后? 27 39、下面的...

    new String(\"abc\")创建几个对象的解释

    java面试的疑惑剪辑 博文链接:https://z-jq1015.iteye.com/blog/248599

    java 面对对象编程.pdf.zip

    面向对象基础 面向对象和面向过程的区别 成员变量与局部变量的区别 创建一个对象用什么运算符?对象实体与对象引用有何不同? 对象的相等和引用相等的区别 类的构造方法的作用是什么?...这句话创建了几个

    java基础心得总结.rar

    描述java基础容易忽略的问题,如下面几个知识点: int a = 1;1会存放在栈里 String s1 = "thanks";thanks会存放在data segment里 String s2 = new String("thanks");thanks会存放在data segment里 String a ="th...

    Java 最常见的 208 道面试题:第一模块答案

    两个对象的 hashCode()相同,则 equals()也一定为 true,对 吗? final 在 java 中有什么作用? java 中的 Math.round(-1.5) 等于多少? String 属于基础的数据类型吗? java 中操作字符串都有哪些类?它们之间有...

    java面试题目.docx

    创建了几个stringobject?是否可以继承String类? 答:String创建对象有两种情况: 第一种:如果String常量池中已经创建了“xyz”,则不会继续创建,此时只创建了一个对象new String(“xyz”) 第二种:如果String...

    java基础面试题目,常见的几个java面试题目:说一下java类集;JDK 和 JRE 有什么区别

    java基础面试题目,常见的几个java面试题目:说一下java类集;JDK 和 JRE 有什么区别;Spring的工作原理;框架的源码有没有看过;动态代理是怎么实现的;final 在 Java 中有什么作用; Java 中的 Math. round(-1. 5)...

    HttpClient以及获取页面内容应用

    通过一个URLConnection或者一个保存有网页内容的字符串来初始化Parser,或者使用静态函数来生成一个Parser对象。 ParserFeedback的代码很简单,是针对调试和跟踪分析过程的,一般不需要改变。而使用Lexer???? ...

    gson 使用Gson将Java对象转换为JSON

    下面是几个小例子 1. toJson() example Java 代码 收藏代码 1. class TestObjectToJson { 2. private int data1 = 100; 3. private String data2 = "hello"; 4. } 5. 6. TestObjectToJson obj = new ...

    android-cts.part1

    android-cts.part1android-cts.part1

    jsp九大内置对象

    当一个客户访问一个服务器时,可能会在这个服务器的几个页面之间切换,服务器应当通过某种办法知道这是一个客户,就需要Session对象。  (2)Session对象的ID  当一个客户首次访问服务器上的一个JSP页面时,JSP...

    java联系题

    //执行到这一行时,创建了几个对象? String s1 = "abc";//执行到这一行时,创建了几个对象? String s2 = new String("abc");//执行到这一行时,创建了几个对象? System.out.println(s == s1);//输出结果是什么...

    JAVA编写计算器

    //声明几个变量 String s1, s2, s3; double u1, u2, u3; char op; //设置各种方法参数 public Untitled1() { this.setTitle("我的计算器"); this.setLayout(new GridLayout(7, 1, 5, 5));...

    java 处理 json格式及例子

    处理json格式数据。。 String s0 = "{cart_1325036696007:{goods_id:"100015",goods_name:"澳大利亚进口绵羊",goods_imgsrc:... //共有几组对象 System.out.println(o.has("cart_1325036696007")); //有无该该值

    最新JAVA编程题全集_50题及答案

    写一个函数,例如:给你的 a b c 则输出 abc acb bac bca cab cba import java.util.ArrayList; import java.util.List; public class NumTest { public static void main(String[] args) { String s="ABCD";...

Global site tag (gtag.js) - Google Analytics