首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

String str=new String("abc");   紧接着这段代码之后的往往是这个问题,那就是这行代码究竟创建了几个String对象呢?...String str只是定义了一个名为str的String类型的变量,因此它并没有创建对象;=是对变量str进行初始化,将某个对象的引用(或者叫句柄)赋值给它,显然也没有创建对象;现在只剩下new String...二、调用Class类的newInstance方法,利用反射机制创建对象。 我们正是使用new调用了String类的上面那个构造器方法创建了一个对象,并将它的引用赋值给了str变量。...同时我们注意到,被调用的构造器方法接受的参数也是一个String对象,这个对象正是"abc"。由此我们又要引入另外一种创建String对象的方式的讨论——引号内包含文本。...只有使用引号包含文本的方式创建String对象之间使用“+”连接产生的新对象才会被加入字符串池中。

86810

java面试题:new String(abc)创建几个对象String a=abc,String b=new String(abc)区别

String str2=new String(“abc”)区别有两种方式创建String对象:字面量赋值、new关键字使用字符串字面值创建String对象String str = "abc":java...引用str指向常量池中字符串"abc"的地址,是在常量池中拿值【字符串常量池中不会存储相同内容的字符串】使用构造函数构建String对象String str = new String("abc"):...2.String str="abc",String str=new String("abc")创建了几个对象经过上文讲解,我们就知道两者区别在于 创建对象个数不同String str=“abc"创建了几个对象...String(“abc”)创建了几个对象?...static void main(String[] args) { String a = "ab"; //创建a对象 String b = "cd"; //创建b对象

13800
您找到你想要的搜索结果了吗?
是的
没有找到

面试题之String str = new String(“abc”); 创建了几个对象

今天去面试的时候碰到了这个问题:String str = new String(“abc”); 创建了几个对象,回来自己研究并查阅资料才发现答错了。。...网上的争论不少,有的说是两个,答案应该是:两个或一个 理由解释如下: 都了解java 的字符串常量缓冲区(字符串池,字符串常量池), 如果代码是这样的: String str2 = new String...("abc"); 并且 abc 字符串之前没有用过,这毫无疑问创建了两个对象,一个是new String 创建的一个新的对象,一个是常量“abc”对象的内容创建出的一个新的String对象, 但是如果代码是这样子的...: String str1 = "abc"; String str2 = new String("abc"); 嗯,创建几个就不好说了,我们还是测试一下吧,首先我们打开cmd.exe, 通过javac...str2 = new String(“abc”); 此时就创建一个对象,而abc 则是从字符串常量缓冲区中取出来的。

32410

某团面试题:String s = new String(111)会创建几个对象

由于String字符串的不可变性我们可以十分肯定常量池中一定不存在两个相同的字符串。 这里先去JVM给常量池里找,找到了就不用创建对象了,直接把对象的引用地址赋给a。...找不到会重新创建一个对象,然后把对象的引用地址赋给a。同理a="222";也是先找,找不到就重新创建一个对象,然后把对象的引用地址赋给a。...得出两个结论: String对象一旦被创建就是固定不变的了,对String对象的任何改变都不影响到原对象,相关的任何变化性的操作都会生成新的对象。...接触java后都知道可以new一个对象。所以 String b = new String("111");就是创建一个对象然后把对象引用地址赋给变量b。...答案: 如果常量池中存在,则只需创建一个对象,否则需要创建两个对象。 ?

61940

美团面试题:String s = new String(111) 会创建几个对象

由于 String 字符串的不可变性我们可以十分肯定常量池中一定不存在两个相同的字符串。 这里先去 JVM 给常量池里找,找到了就不用创建对象了,直接把对象的引用地址赋给 a。...找不到会重新创建一个对象,然后把对象的引用地址赋给 a。同理 a="222"; 也是先找,找不到就重新创建一个对象,然后把对象的引用地址赋给 a。...得出两个结论: String 对象一旦被创建就是固定不变的了,对 String 对象的任何改变都不影响到原对象,相关的任何变化性的操作都会生成新的对象。...接触 java 后都知道可以 new 一个对象。所以 String b = new String("111"); 就是创建一个对象然后把对象引用地址赋给变量 b。...答案: 如果常量池中存在,则只需创建一个对象,否则需要创建两个对象

54500

美团面试题:String s = new String(111)会创建几个对象

由于String字符串的不可变性我们可以十分肯定常量池中一定不存在两个相同的字符串。 这里先去JVM给常量池里找,找到了就不用创建对象了,直接把对象的引用地址赋给a。...找不到会重新创建一个对象,然后把对象的引用地址赋给a。同理a="222";也是先找,找不到就重新创建一个对象,然后把对象的引用地址赋给a。...得出两个结论: String对象一旦被创建就是固定不变的了,对String对象的任何改变都不影响到原对象,相关的任何变化性的操作都会生成新的对象。...接触java后都知道可以new一个对象。所以 String b = new String("111");就是创建一个对象然后把对象引用地址赋给变量b。...答案: 如果常量池中存在,则只需创建一个对象,否则需要创建两个对象。 最近给大家找了 零基础学小程序 资源,怎么领取?

38160

工作10年后,再看String s = new String(xyz) 创建了几个对象

从结果来看,ldc命令在常量池中创建了一个"xyz"的对象,然后把他推至操作数栈顶,然后astore保存到局部变量,return返回。...很明显,我们看到new 创建了一个String对象,同时ldc在常量池中创建了"xyz"字符串对象,之后invokespecial执行构造函数,astore_1赋值,return返回。...通过以上两个例子,可以知道String s = new String("xyz"); 创建了2个对象,而有些答案说的3个对象,则是把引用s也算作一个对象。...从这里,很明显的发现这就是我们例子1和2的一个结合,但是注意两次ldc后面的#2,#号代表着索引,说明第二次new String("xyz")的时候并没有重新创建xyz对象。...new,创建一个对象,并将其引用值压入栈顶。 总结 到底创建了几个对象呢?

64910

工作10年后,再看String s = new String(xyz) 创建了几个对象

从结果来看,ldc命令在常量池中创建了一个"xyz"的对象,然后把他推至操作数栈顶,然后astore保存到局部变量,return返回。...很明显,我们看到new 创建了一个String对象,同时ldc在常量池中创建了"xyz"字符串对象,之后invokespecial执行构造函数,astore_1赋值,return返回。...通过以上两个例子,可以知道String s = new String("xyz"); 创建了2个对象,而有些答案说的3个对象,则是把引用s也算作一个对象。...从这里,很明显的发现这就是我们例子1和2的一个结合,但是注意两次ldc后面的#2,#号代表着索引,说明第二次new String("xyz")的时候并没有重新创建xyz对象。...new,创建一个对象,并将其引用值压入栈顶。 总结 到底创建了几个对象呢?

37810

Java中创建String对象的两种方式

Java中创建String对象的两种方式 一、Java中创建String对象的两种方式 //方式一:通过字符串常量的方式 String str1 = "joshua317"; //方式二:通过new一个对象方式创建...String str2 = new String("joshua317"); //false System.out.println(str1==str2); 二、创建String对象的两种方式区别...2.1 方式一:通过字符串常量的方式 这种方式是在常量池中获取对象("joshua317" 属于字符串常量,因此编译时期会在常量池中创建一个字符串对象),因为直接使用双引号声明出来的String对象会直接存储在常量池中...然后就是在调用new()时,JVM 将会调用String的构造函数,同时引用常量池中的"joshua317" 字符串,在堆内存中创建一个String对象并且返回堆中的引用地址。...String.intern() 是一个 Native 方法,它的作用是: 如果运行时常量池中已经包含一个等于此 String 对象内容的字符串,则返回常量池中该字符串的引用; 如果没有,则在常量池中创建与此

34720

String s=a+b+c,到底创建了几个对象

首先看一下这道常见的面试题,下面代码中,会创建几个字符串对象?...String s="a"+"b"+"c"; 如果你比较一下Java源代码和反编译后的字节码文件,就可以直观的看到答案,只创建了一个String对象。...进行计算 使用加减运算符+、-,乘除运算符*、 / 、% 进行计算 使用移位运算符 >>、 >>进行位移操作 …… 字面量(literals)是用于表达源代码中一个固定值的表示法,在Java中创建一个对象时需要使用...而字符串s2在进行拼接时,表达式中引用了其他对象,不属于编译期常量,因此不能进行折叠。 那么,在没有常量折叠的情况下,为什么最后返回的是false呢?...而在最后,调用了StringBuilder的toString方法,生成了一个新的字符串对象,而不是引用的常量池中的常量。这样,也就能解释为什么在上面的例子中,s2=="ab"会返回false了。

90020

String s=a+b+c,到底创建了几个对象

首先看一下这道常见的面试题,下面代码中,会创建几个字符串对象?...String s="a"+"b"+"c"; 如果你比较一下Java源代码和反编译后的字节码文件,就可以直观的看到答案,只创建了一个String对象。...进行计算 使用加减运算符+、-,乘除运算符*、 / 、% 进行计算 使用移位运算符 >>、 >>进行位移操作 …… 字面量(literals)是用于表达源代码中一个固定值的表示法,在Java中创建一个对象时需要使用...而字符串s2在进行拼接时,表达式中引用了其他对象,不属于编译期常量,因此不能进行折叠。 那么,在没有常量折叠的情况下,为什么最后返回的是false呢?...而在最后,调用了StringBuilder的toString方法,生成了一个新的字符串对象,而不是引用的常量池中的常量。这样,也就能解释为什么在上面的例子中,s2=="ab"会返回false了。

88710

String 对象创建方式有哪几种?有什么区别?

String 对象创建方式有哪几种?有什么区别? 173 total views, 3 views today Java 中创建字符串对象有两种方式。...String s1 = "abc"; String s2 = new String("abc"); 两种方法有些区别。...如果不存在,那么会创建一个 abc 字符串对象,再赋值给 s1。因此,这句话可能只创建 1 个或者 0 个对象。 第二种方法会在内存中创建 1 个或者 2 个对象。...如果 abc 字符串已经在字符串池中存在了,那么就不需要在创建 abc 字符串的对象了,但是 new String 这行代码会再构造出一个和 abc 一样的字符串,并且是放在堆上。...使用的时候尽量不要使用 new String 这种方式。 原创文章,转载请注明出处!http://www.javathings.top/string对象创建方式有哪几种?有什么区别?/

3.1K30

【JavaScript】JavaScript 变量 ⑤ ( JavaScript 数据类型 - String 字符串类型 | 引号嵌套 | 创建字符串 | 转义字符 )

一、 JavaScript 数据类型 - String 字符串类型 1、String 类型简介 JavaScript 的 String 字符串类型 是 基本数据类型 的一种 , 用于表示文本数据 ; 字符串...一旦创建 就不可改变 , 但是可以 创建 新的字符串 ; String 类型 的 字符串 是 使用双引号 " 或单引号 ' 包裹的若干字符 ; "Hello, World"; 'Hello, World...双引号 ; var str2 = 'Hello "Tom"'; 3、创建字符串 创建字符串 : 使用 字面量 创建 字符串 : let str1 = "Hello World"; let str2...= 'Hello World'; 使用 String 构造函数 创建字符串 : let str3 = new String('Hello World'); 4、转义字符 字符串 中 如果要 使用 特殊字符..., 需要使用 转义字符 \ 进行转义 , : 单引号 ' , 双引号 " , 换行 , 缩进 , 空格 , 转义字符 \ 等字符 ; 单引号 / 双引号 : 如果要在 JavaScript 字符串中

9410

【C++ 语言】C++字符串 ( string 类 | 创建方法 | 控制台输出 | 字符串操作 | 栈内存字符串对象 | string* )

文章目录 C++ 字符串 对象 C++ 字符串 对象 创建方法 C++ 字符串 对象 输出到控制台 C++ 字符串 拼接 C++ 字符串 方法调用 ( 栈内存对象 ) C++ 字符串 方法调用 (...: 该 string 类定义在 iostream 头文件中 , 不必引入另外的头文件 ; #include ---- C++ 字符串 对象 创建方法 C++ 字符串 对象 创建方法...创建 string 对象 ; ① 传入 string 参数 : string 构造方法可以传入 string 对象 ; ② 传入 C 字符串参数 : string 构造方法也可以传入 一个 C 字符串...方式调用栈内存对象的方法 ; ---- C++ 字符串 方法调用 ( 堆内存对象 ) C++ 字符串 堆内存对象 方法调用 : 1.堆内存对象创建 : 使用 new 创建string 对象 需要在堆内存中为其分配内存..., 返回的是 string* 指针类型 ; //使用 new 创建对象 , 就不能使用 .

57220

面试题系列第2篇:new String()创建几个对象?有你不知道的

常见面试问题 下面代码中创建了几个对象? new String("abc"); 答案众说纷纭,有说创建了1个对象,也有说创建了2个对象。答案对,也不对,关键是要学到问题底层的原理。...然后再执行new操作,会在堆内存中创建一个存储“abc”的String对象对象的引用赋值给str2。此过程创建了2个对象。...当然,如果检索常量池时发现已经存在了对应的字符串,那么只会在堆内创建一个新的String对象,此过程只创建了1个对象。...针对上面的问题,我们再次升级一下,下面的代码会创建几个对象String str = "abc" + new String("def"); 创建了4个,5个,还是6个对象?...因此,上面的准确回答应该是创建了4个字符串对象和1个StringBuilder对象。 小结 我们通过一行创建字符串的代码逐步分析String对象的整个构建及拼接过程,了解了底层实现原理。

7.4K83
领券