java中String str1…的区别,详细见内容

String str1,str2;
str1 = "we are friends";
str2 = "we are friends";

String str1 = "we are friends";
String str2 = "we are friends";
在内存上的区别是什么?
是否有区别?图片说明

没有区别,他们指向同一个对象

就最后用途和使用上来说,没什么太大区别。
从内存上说,前者先定义String str1,str2; 这里str1和str2,系统默认为null,没有指向任何内存空间,接着具体赋值str1 = "we are friends"; str2 = "we are friends"; 这时候就分配了所占用的内存空间。
后者则是为直接为str1,str2这2个对象分配了内存空间。
当然,我也是学习不久,可能回答有误…… = =

只有一个区别,声明和定义的区别
声明是告诉编译器有这么个变量,但并不实现。定义就是实现这个变量,真正在内存(堆或栈中)为此变量分配空间
但是它们最后都是放在字符串常量区
而且String str1
str1 = "hello"
String str2= "hello"
str1和str2它们 都会指向同一个内存地址

在内存上没有区别,只不过赋值顺序的问题

内存上没区别,java和C语言不一样,不区分声明与定义

没有区别,深了讲他们指向的都是一个字符串。