发布网友 发布时间:2022-04-28 15:53
共5个回答
热心网友 时间:2022-06-19 13:48
第一个问题 创建了 4个对象 不写new String 也创建对象是因为 赋值时对象会自动创建热心网友 时间:2022-06-19 13:48
您好,提问者:
String s1 = “aaa”;//先说类:
Java中的一切东西都是在类中定义的,比如:变量、常量、方法等。
//我创建了一个Person类
class Person{
String name = "xxx"; //这个是变量,也可以称之为类的属性
public void add(){
//这个是就是方法
}
}
追问那最终的答案是创建了几个String对象?
还有,我记得在网上看到的equals好像也创建对象的,是吗?
追答不是,equals是比较。
一共创建了三个对象
热心网友 时间:2022-06-19 13:49
String s1 = “aaa”;追答我知道这个意思了,因为String类型的变量是创建后存放在堆内存中的,s1的字符串aaa已经存放在了字符串池中,s2创建后,为避免过度占用内存,会现在池中寻找aaa,找到了的话,那就不需要再继续创建新的引用地址了,所以可以说是s2和s1一样,使用同一个对象,最终是生成了三个对象。没错。而s3 s4都是在堆中重新开辟空间生成新的对象。 你在不确定的时候,可以这样测试,看看s1==s2返回的是什么,s3 s4 用equals看看是不是true或false。
热心网友 时间:2022-06-19 13:49
3个String对象, 输出依次为true, false, true
追问3个,分别是哪三个?不是new一个对象产生2个String对象吗?追答写错了... 纠正一下, 是4个
JVM有一个字符串池, 里面存放各种字符串对象, 并且可以共享使用, 所以字符串对象指的就是字符串池里的各种字符串对象
String s1 = “aaa”;---->字符串池新建一个String对象"aaa", 并且s1引用了这个String对象(1个对象)
String s2 = “aaa”;---->字符串池里已有String对象"aaa", 所以s2直接引用"aaa"(1个对象)
String s3 = new String(“aaa”);---->使用了new String()构造方法, 在字符串池里又新建了另一个String对象"aaa", 并且s3引用另一个新的"aaa"(2个对象)
String s4 = new String(“AAA”);---->"AAA"在字符串池里没有, 所以新建String对象"AAA", 又因为new String()同理又新建另一个"AAA", 这一步新建了两个String对象(2+2=4个对象)
附上参考链接:http://www.cnblogs.com/ydpvictor/archive/2012/09/09/2677260.html
热心网友 时间:2022-06-19 13:50
Test就是你创建的为类 addition为方法 在你的类中有main()函数,这个函数为整个程序执行的入口。