黑马程序员技术交流社区
标题:
String问题
[打印本页]
作者:
kun1990
时间:
2013-12-9 23:02
标题:
String问题
请问一下String直接定义一个字符串变量与new String()一个字符串有什么不同?
作者:
一碗小米周
时间:
2013-12-9 23:10
首先,String s1 = "abc"; 这里只创建了一个对象,就是那个字符串对象。而String s2 = new String("abc"),这里是创建了两个对象,一个是new String ,一个是字符串对象。
作者:
雪飘舞
时间:
2013-12-9 23:14
String a1 = "asd";
直接定义一个字符串,只有一个对象asd。
另外当字符串一旦初始化就不可以改变(由于a1是类类型变量,a1 = "abc";改变的是a1指向,asd地址值并没有变化)
String a2 = new String("asd");
这样定义的话会有2个对象,一个是new ,一个是"asd"
毕老师的视频讲的很详细,建议好好看下视频。
作者:
乔_博_文
时间:
2013-12-9 23:20
楼主看这里:
String str = new String("abc");和String str = "abc";的区别,分析如下:
我们可以把String x = new String("abc")这行代码分成String str、=、"abc"和new String()四部分来看待。String str只是定义了一个名为str的String类型的变量,因此它并没有创建对象;=是对变量str进行初始化,将某个对象的引用(或者叫句柄)赋值给它,显然也没有创建对象;现在只剩下new String("aas")了。那么,new String("aas")之所以创建了两个对象,是因为调用了String的构造器:public String(String original){.....}.正是使用new调用了String类的构造器方法创建了一个对象,并将它的引用赋值给了str变量。同时,被调用的构造器方法接受的参数也是一个String对象,这个对象正是"abc"。
再来看String a="abc";,这行代码被执行的时候,JAVA虚拟机首先在字符串池中查找是否已经存在了值为"abc"的这么一个对象,它的判断依据是String类equals(Object obj)方法的返回值。如果有,则不再创建新的对象,直接返回已存在对象的引用;如果没有,则先创建这个对象,然后把它加入到字符串池中,再将它的引用返回。
希望能帮到你哦~
作者:
纷飞尽
时间:
2013-12-10 00:43
给你简单的举个例子吧!
String str="纷飞尽";这样代表内存当中有一个字符串赋值为“纷飞尽”
String str=new String("纷飞尽");这样代表内存有俩个对象分别为str和"纷飞尽"
老毕在讲String的时候专门说过
作者:
史超
时间:
2013-12-10 09:14
1,String s = “abc”;这样的形式是直接给S赋值。此时这个表达式只生成一个对象s
2,但是String s = new String("abc");这样的话,会在栈内存中生成一个对象s,它指向堆内存的对象“abc”
从而这样写会生成两个对象:一个是s ,一个是 abc。这样的表达式虽然不会对程序造成影响,但是为了高效起见,一般的都是直接写成String s = "abc"
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2