Java的字符串问题 5
Strings="xyz";会在编译时创建一个"xyz"字符串,但是没有new关键字。那么运行时会为s创建一个String类型的对象实例吗?这个对象有自己的内存空间吗?执...
String s="xyz";
会在编译时创建一个"xyz"字符串,但是没有new 关键字。那么运行时会为s创建一个String类型的对象实例吗?
这个对象有自己的内存空间吗?
执行system.out.println(s=="xyz");返回结果是true,就说明s指向的是"xyz"所在的空间,这不表明JVM并没有为s分配新的内存空间吗?
再有,编译s+="1";时会创建一个"xyz1"的字符串吗?
我说的是在编译时 展开
会在编译时创建一个"xyz"字符串,但是没有new 关键字。那么运行时会为s创建一个String类型的对象实例吗?
这个对象有自己的内存空间吗?
执行system.out.println(s=="xyz");返回结果是true,就说明s指向的是"xyz"所在的空间,这不表明JVM并没有为s分配新的内存空间吗?
再有,编译s+="1";时会创建一个"xyz1"的字符串吗?
我说的是在编译时 展开
展开全部
String 对象在java里实际是存在于常量池,如果每次使用常量式的赋值就会重新在常量池中产生一个然后将引用赋予变量,如果常量池已有该指则直接将该引用赋予变量。
没有new关键字,则要看常量池有没有“xyz”的值,如果有则不创建只拿引用,如果没有创建后拿引用。
这个对象的内存空间是的确存在的。
s==“xyz”比较的是地址,即引用,我们上面不管哪种情况均已将引用给了s,故比较结果为true。
s+=“1”会还是判断常量池中有没有“xyz1”这个值,其他都一样。
没有new关键字,则要看常量池有没有“xyz”的值,如果有则不创建只拿引用,如果没有创建后拿引用。
这个对象的内存空间是的确存在的。
s==“xyz”比较的是地址,即引用,我们上面不管哪种情况均已将引用给了s,故比较结果为true。
s+=“1”会还是判断常量池中有没有“xyz1”这个值,其他都一样。
展开全部
String s="xyz";会在编译时创建一个"xyz"字符串,但是没有new 关键字。那么运行时不会为s创建一个String类型的对象实例
再有,编译s+="1";时会创建一个"xyz1"的字符串
再有,编译s+="1";时会创建一个"xyz1"的字符串
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
具体的就是说,如果不使用new关键字的话,在创建的时候会去常量池查找是否有这个值,如果有的话,直接引用,如果没有的话,就new一个出来。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
会,每个string会自动的给分配空间,String a=“1”和a=a+"2"是指向两个不同的内存地址
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询