String s=new String("abc");一共创建了几个对象

如果字符串常量池中不存在“abc”,该语句执行时会先在字符串常量池中创建一个“abc”对象,在执行new语句时在堆去开辟新的空间,创建“abc”字符串,同时栈区会有一个引用s指向堆区的对象,此时如果要算上栈区的引用,共创建3个对象,不算,则创建两个对象。 二:如果字符串常量池中存在“abc”,则只会在堆区创建一个“abc”字符串,同时栈区有一个引用指向堆中的对像。如果算上栈中的引用,共创建了两个对象,不算,则创建了一个对象。

原文地址:https://www.cnblogs.com/kpsmile/p/10884968.html

时间: 2024-10-13 08:55:54

String s=new String("abc");一共创建了几个对象的相关文章

String str=new String("abc")到底创建了几个对象

这句代码到底创建了几个对象?研究了好一阵,现在才能说清楚. package com.sun.test; public class Test<T> { T a; /** * @param args */ public static void main(String[] args) { String str=new String("abc"); } } 我们来看下这段简单代码的字节码: <pre name="code" class="java

String str = new String(&quot;abc&quot;),这段代码一共生成了几个String对象?为什么?

String str = new String("abc")创建了俩个对象,首先为创建一个String对象"abc",然后在调用String类的构造方法时 1 public String(String original) { 2 //other code ... 3 } 再次创建了一个对象original,并把"abc"这个对象传给original,进而赋值给str. 所以一共创建了2个对象.

【Java 重难点知识】String s=new String(&quot;abc&quot;) 与 String=&quot;abc&quot;; 区别

首先, String s=new String("abc");这句话创建了2个对象: 一个为new出来的一个实例对象,另一个则为"abc"; s不为对象,s只是一个引用(C++中的指针). 查询Java中String类的构造器,有一个这样的构造器,api如下: public ( original) 初始化一个新创建的 String 对象,使其表示一个与参数相同的字符序列:换句话说,新创建的字符串是该参数字符串的副本.由于 String 是不可变的,所以无需使用此构造

写一个类,在任何时候都可以向它查询“你已经创建了多少个对象?”

源代码: package jxl;class sum{ public static int a=0; int c1; public sum(int c2){ c1=c2; a++; } public int get(){ return a; }}public class Test4 { public static void main(String[] args) { // TODO 自动生成的方法存根 //调用 sum one=new sum(2); sum two=new sum(3); //

String s=new String(&quot;abc&quot;)创建了几个对象?

String str=new String("abc");   紧接着这段代码之后的往往是这个问题,那就是这行代码究竟创建了几个String对象呢? 相信大家对这道题并不陌生,答案也是众所周知的,2个. 接下来我们就从这道题展开,一起回顾一下与创建String对象相关的一些JAVA知识. 我们可以把上面这行代码分成String str.=."abc"和new String()四部分来看待.String str只是定义了一个名为str的String类型的变量,因此它并

【转】String str = new String(&quot;abc&quot;)创建了多少个对象?

原帖地址:http://www.cnblogs.com/dolphin0520/p/3778589.html 这个问题在很多书籍上都有说到比如<Java程序员面试宝典>,包括很多国内大公司笔试面试题都会遇到,大部分网上流传的以及一些面试书籍上都说是2个对象,这种说法是片面的. 如果有不懂得地方可以参考这篇帖子: http://rednaxelafx.iteye.com/blog/774673/ 首先必须弄清楚创建对象的含义,创建是什么时候创建的?这段代码在运行期间会创建2个对象么?毫无疑问不可

Java String a=new String(&quot;ABC&quot;)的创建

题目 String s = new String("hello")和String s = "hello";的区别? 区别 String s = new String("hello")会创建2(1)个对象,String s = "hello"创建1(0)个对象. 注:当字符串常量池中有对象hello时括号内成立! 引入 ==与equals()的区别: ==:比较引用类型比较的是地址值是否相同 equals:比较引用类型默认也是比

String s=new String("xyz");创建几个String对象的问题

首先让我们了解几个概念: 栈 :由JVM分配区域,用于保存线程执行的动作和数据引用. 堆 :由JVM分配的,用于存储对象等数据的区域. 常量池constant pool :在堆中分配出来的一块存储区域,用于存储显式 的String,float或者integer.这是一个特殊的共享区域,可以在内存中共享的不经常改变的东西,都可以放在这里. 进入正题: String a = "abc";①String b = "abc";② 使用String a = "abc

java中String s="abc"及String s=new String("abc")详解

1.   栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. 2.   栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器.但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性.另外,栈数据可以共 享,详见第3点.堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据.但缺点是,由于要 在运行时动态分配内存,存取速度较慢. ==是判断