Java 什么';有什么区别

Java 什么';有什么区别,java,string,memory,encapsulation,Java,String,Memory,Encapsulation,& 有人能告诉我这里执行的是什么任务吗 我知道问这样一个愚蠢的问题几乎不值得,但我只想找出字符串赋值和其他对象赋值之间的区别 据我所知,像“abc”这样的每个字符串值本身都是一个字符串对象,那么当它被分配给字符串对象时执行的是什么类型或操作。像a=“xyz”字符串是不可变的意味着它们不能(在内存中)更改 所以当我创建一个字符串时 String a = "abc"; a = "xyz"; 然后我分配它 String a = "abc"; 发生的是a指向“abc”的内存,但现在是一个全新的字符串

&

有人能告诉我这里执行的是什么任务吗

我知道问这样一个愚蠢的问题几乎不值得,但我只想找出字符串赋值和其他对象赋值之间的区别


据我所知,像“abc”这样的每个字符串值本身都是一个字符串对象,那么当它被分配给
字符串对象时执行的是什么类型或操作。像
a=“xyz”
字符串
是不可变的
意味着它们不能(在内存中)更改

所以当我创建一个
字符串时

String a = "abc";
a = "xyz";
然后我分配它

String a = "abc";
发生的是
a
指向
“abc”
的内存,但现在是一个全新的字符串,指向
“xyz”

现在对于
int
,另一方面,它们只是改变,它们是可变的。 所以当我创建一个
int

inta=10

然后分配它

String a = "abc";
a=30

发生的事情是a
在10年内一直指向内存,但现在10已更改为30,但a仍然指向同一内存


注意:这就是为什么您可以说
if(String1==String2)
的原因。这将测试它们是否指向相同的内存位置。因此,您必须执行
if(String1.equals(String2))
来测试它们是否是相同的单词。

字符串是
不可变的
意味着它们不能被更改(在内存中)

a = "xyz"
所以当我创建一个
字符串时

String a = "abc";
a = "xyz";
然后我分配它

String a = "abc";
发生的是
a
指向
“abc”
的内存,但现在是一个全新的字符串,指向
“xyz”

现在对于
int
,另一方面,它们只是改变,它们是可变的。 所以当我创建一个
int

inta=10

然后分配它

String a = "abc";
a=30

发生的事情是a
在10年内一直指向内存,但现在10已更改为30,但a仍然指向同一内存

注意:这就是为什么您可以说
if(String1==String2)
的原因。这将测试它们是否指向相同的内存位置。因此,您必须执行
if(String1.equals(String2))
来测试它们是否是相同的单词

a = "xyz"
现在
a
具有新值,即30

int a = 10;
a = 30;
参考变量
a
现在指向新字符串对象ie
xyz

现在
a
具有新值,即30

int a = 10;
a = 30;

引用变量
a
现在指向新字符串对象
xyz

当您写入时,字符串是不可变的

String a = "abc";
a = "xyz";
在字符串池中创建一个包含abc内容的字符串,当您写入
a=“xyz”

另一个字符串是在字符串池中创建的,其内容为xyz,旧的字符串不会被替换。而在int的情况下,值会发生更改。

当您写入时,字符串是不可变的

String a = "abc";
a = "xyz";
在字符串池中创建一个包含abc内容的字符串,当您写入
a=“xyz”

另一个字符串是在字符串池中创建的,其内容为xyz,旧的字符串不会被替换。而在int的情况下,值会发生更改。

字符串是不可变的。因此,在重新分配引用时会创建新对象。因此,新对象XYZ将在堆中创建

String a ="abc" 
本地定义的原语将位于堆栈上。但是,如果将原语定义为对象实例的一部分,则该原语将位于堆上

String a = "abc";
a = "xyz";

所以在上面的例子中,一个将在堆栈上。

字符串是不可变的。因此,当您重新分配引用时,将创建新对象。因此,将在堆中创建新对象XYZ

String a ="abc" 
本地定义的原语将位于堆栈上。但是,如果将原语定义为对象实例的一部分,则该原语将位于堆上

String a = "abc";
a = "xyz";
所以在上述情况下,a将位于堆栈上

  • int
    是基本类型-不是对象

  • 在您的字符串示例中,Java将创建“abc”
    字符串
    对象,将此对象的引用分配给变量
    a
    ,然后创建“xyz”字符串对象,并将此对象的引用分配给变量“a”(覆盖其先前的值)

  • int
    是基本类型-不是对象

  • 在您的字符串示例中,Java将创建“abc”
    字符串
    对象,将此对象的引用分配给变量
    a
    ,然后创建“xyz”字符串对象,并将此对象的引用分配给变量“a”(覆盖其先前的值)


  • 字符串是一个不可变的对象。将值重新分配给字符串时,系统将重新创建字符串对象。您的示例实际上是这样工作的:

    int a =10;
    a = 30;
    

    第二,int不是一个对象,它是一个基本变量;它没有任何方法。对于类似的操作,您需要一个整数对象。

    字符串是一个不可变的对象。将值重新分配给字符串时,系统将重新创建字符串对象。您的示例实际上是这样工作的:

    int a =10;
    a = 30;
    
    第二,int不是一个对象,它是一个基本变量;它没有任何方法。对于类似的操作,您需要一个整数对象

    INTA=10

    将整数值10赋给int类型的新引用变量“a”

    a=30

    将整数值30分配给同一参考变量“a”

    字符串a=“abc”

    创建一个新的字符串对象“abc”,并将其分配给字符串类型的新引用变量“a”

    a=“xyz”

    创建一个新的字符串对象“xyz”,并使变量“a”指向它。现在堆内存中有两个字符串对象,“abc”和“xyz”。现在对字符串“abc”的引用将丢失,除非您使用另一个变量指向它

    INTA=10

    将整数值指定给10