请问一下各路大神:String a="123";String b=a;一共创建了多少个对象?

Back End Developer 2018-12-30 11:08:30
String a="123";String b=a;一共创建了多少个对象?
...全文
1287 30 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
Back End Developer 2019-07-25
  • 打赏
  • 举报
回复
有理说不清吖
秋瑟瑟 2019-07-25
  • 打赏
  • 举报
回复
在堆内存中的常量池创建了一个对象,栈内存中创建了两个引用.
guishuanglin 2019-07-25
  • 打赏
  • 举报
回复
每一个 String 对象包含了: private final char value[]; private int hash; private static final long serialVersionUID = -6849794470754667710L; serialVersionUID 如果不算的话, 就很清楚了.
对吃没兴趣 2019-07-25
  • 打赏
  • 举报
回复
两个对象,指向同一个地址
chk1337 2019-07-25
  • 打赏
  • 举报
回复 1
String a="123";
在栈上创建了一个引用型变量a,在常量池中创建来一个字符常量“123”,并将“123”的地址复制给引用型变量a。
String b=a;
在栈上创建了一个引用型变量b,并将a的值赋给b,既b也指向了字符常量“123”。
总结,总共在栈上创建了两个引用型变量a和b。在常量池中创建了一个字符常量。
其实严格来说,这个字符常量并不是代码执行到这里才创建,而是加载这个类的时候就创建的。
黄邱小鸟 2019-07-25
  • 打赏
  • 举报
回复

String a="123" 在类被加载时候创建,然后String b=a 只是将b的引用指向了和a同一个对象身上而已,这个过程并没有任何对象创建。

码农脱贫 2019-01-07
  • 打赏
  • 举报
回复
我的博客有关于string的详细解答,可以解决你的困惑
https://mp.csdn.net/postedit/86007922
码农脱贫 2019-01-07
  • 打赏
  • 举报
回复
我确定是一个对象。String a="123";String b=a;其实只有一个对象被创建,第二个是在常量池中直接拿到了对象的内存地址。
https://mp.csdn.net/postedit/86007922
r00_a2lBUR 2019-01-07
  • 打赏
  • 举报
回复
两个对象,不相关的两个对象
Albert Yang 2019-01-06
  • 打赏
  • 举报
回复
引用 19 楼 qq_44294653的回复:
一个地址 两个对象
两个地址,一个对象
Albert Yang 2019-01-06
  • 打赏
  • 举报
回复
一个对象,两个引用指向同一个对象
末夏微凉 2019-01-06
  • 打赏
  • 举报
回复
字符串常量池多了个123,如果这算对象的话那就是一个。至于a和b,都是变量名(放在栈里),有指向123那块地址的指针。这种方式不会在堆空间创建String对象,可以通过查看类文件(.class)。查看类文件的方式可以使用jdk提供的javap看,并没有new
weixin_44423747 2019-01-06
  • 打赏
  • 举报
回复
一个对象 在堆内存中开辟了一个空间 后一个只是更改了指向
huwao 2019-01-05
  • 打赏
  • 举报
回复
这个的话最好自己动手测试一下,通过断点测试能很直观的看出变量生成是虚拟机栈内存的变化。这样子能记得稳固一些。
huwao 2019-01-05
  • 打赏
  • 举报
回复
两个对象呀,看15楼提供的演示图片中的id,绝对是分配了两个对象(开辟两处内存空间),Java这样的设计应该是为了保证String类型的灵活性与高可用。

引用 15 楼 lx_six_satr 的回复:
public class Test2 {
public static void main(String[] args) {
String a = "123";
String b = a;
String c = "1";
}
}


看图说话
老实讲我也是小白,在这给提供一个思路而已
知风言无意 2019-01-05
  • 打赏
  • 举报
回复
一个地址 两个对象
_Ricky_ 2019-01-04
  • 打赏
  • 举报
回复
"123" 是存在常量池中的 不需要创建,算是创建了a 、b两个对象,不过指向的地址是一个地址
RUA好多鱼~ 2019-01-03
  • 打赏
  • 举报
回复
只创建了一个对象吧,两个引用指向了同一个对象
lx_six_satr 2019-01-03
  • 打赏
  • 举报
回复
public class Test2 {
	public static void main(String[] args) {
		String a = "123";
		String b = a;
		String c = "1";
	}
}
看图说话 老实讲我也是小白,在这给提供一个思路而已
润夏。 2019-01-03
  • 打赏
  • 举报
回复
两个对象,虽然地址都是同一个,a对象的地址是123在常量池中的地址,而b对象则是引用了a对象的地址,同样指向了常量池中的123.
加载更多回复(10)

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧