Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java是否创建新字符串或指向原始字符串的指针?_Java - Fatal编程技术网

Java是否创建新字符串或指向原始字符串的指针?

Java是否创建新字符串或指向原始字符串的指针?,java,Java,我想知道Java是否曾经创建指向其他字符串的指针 一个可能是指针的示例: App app = new App("name"); String name = app.getName(); 如果在初始化字符串名称后使用app.setName(“newName”)更改值,字符串名称的值不会更改。 这表明字符串名不是指针,而是一个新字符串 但也有可能,对吧?我的意思是,它可能是一个指针,直到其中一个值(应用程序中的字符串名称或字符串名称)被更改以节省内存 那它是指针吗 与以下问题不同: 其中特别要求解

我想知道Java是否曾经创建指向其他字符串的指针

一个可能是指针的示例:

App app = new App("name");
String name = app.getName();
如果在初始化
字符串名称
后使用
app.setName(“newName”)
更改值,
字符串名称
的值不会更改。 这表明字符串名不是指针,而是一个新字符串

但也有可能,对吧?我的意思是,它可能是一个指针,直到其中一个值(应用程序中的字符串名称或字符串名称)被更改以节省内存

那它是指针吗

与以下问题不同:
其中特别要求解释字符串实习。e、 g String.intern()

所有对对象的引用都是指针;但是,
setName
将更改指针的值,即将指针指向其他位置。另外,请注意字符串是不可变的,并且是内部化的,因此每个值始终有一个实例,并且它们永远不会更改。

所有对对象的引用都是指针;但是,
setName
将更改指针的值,即将指针指向其他位置。另外,请注意字符串是不可变的,并且是内部化的,因此每个值始终有一个实例,并且它们永远不会更改。

app.setName(“newName”)将创建一个新字符串“newName”,并将其存储在字符串池中,app中的字符串指针现在被替换为指向新字符串。“name”字符串仍然存在

要记住的关键一点是Java字符串对象从不更改,如果创建新字符串或修改旧字符串,它总是会导致创建新对象。此外,字符串是一个对象,因此字符串变量始终存储对存储在其他位置的字符串的引用(与其他变量一起在堆中,或在字符串常量池中)。

app.setName(“newName”)将创建一个新字符串“newName”,并将其存储在字符串池中,此时将替换app中的字符串指针以指向新字符串。“name”字符串仍然存在


要记住的关键一点是Java字符串对象从不更改,如果创建新字符串或修改旧字符串,它总是会导致创建新对象。此外,字符串是一个对象,因此字符串变量始终存储对存储在其他位置的字符串的引用(与其他变量一起存储在堆中,或者存储在字符串常量池中)。

它的可能副本始终是指针,但是字符串对象也是不可变的,因为你需要指针:为了简单起见,它总是一个引用,你可以把它看作一个指针,但事实并非如此。@KevinEsche这个问题与它总是一个指针的可能重复是什么样的,但是字符串对象也是不可变的,因为你需要指针:为了简单起见,它总是一个引用,你可以把它看作一个指针,但事实并非如此。@KevinEsche这个问题与“所有对对象的引用都是指针”有何相同之处?不,它们不是,因为Java没有指针。为了简单起见,可以像指针一样处理引用,但它们不是空的?那么,链接到内存中某些数据的引用不是指针???与C/C++本机指针的唯一区别在于,不能执行算术运算来循环或更改指针的位置looks@TimothyTrucklejava没有像C这样的手动管理指针(谢天谢地),但它所持有的引用就像指针一样工作:它们是对内存中特定位置的引用。所以在
persona=newperson()中,b=a,a和b都“指向”内存中的同一个位置,因此在人a内部所做的更改将反映在b上,反之亦然。要确定引用是否是指针,我们需要知道“引用”和“指针”这两个词的含义。在不同的语境中,这些词的含义可能不同。爪哇中的“引用”与C++中的“引用”不同,例如,后者不能为空。java规范(不知道)指针是什么,但是它包含了下面的句子:“引用值(通常只是引用)是指向这些对象的指针,以及一个特殊的空引用,它引用了没有对象。”所以,是的,(非空)引用是指针(但它不是C++指针)。“对对象的所有引用都是指针“不,它们不是,因为Java没有指针。为了简单起见,可以像指针一样处理引用,但它们不是空的?那么,链接到内存中某些数据的引用不是指针???与C/C++本机指针的唯一区别在于,不能执行算术运算来循环或更改指针的位置looks@TimothyTrucklejava没有像C这样的手动管理指针(谢天谢地),但它所持有的引用就像指针一样工作:它们是对内存中特定位置的引用。所以在
persona=newperson()中,b=a,a和b都“指向”内存中的同一个位置,因此在人a内部所做的更改将反映在b上,反之亦然。要确定引用是否是指针,我们需要知道“引用”和“指针”这两个词的含义。在不同的语境中,这些词的含义可能不同。爪哇中的“引用”与C++中的“引用”不同,例如,后者不能为空。java规范(不知道)指针是什么,但是它包含了下面的句子:“引用值(通常只是引用)是指向这些对象的指针,以及一个特殊的空引用,它引用了没有对象。”所以,是的,(非空)引用是指针(但它不是C++指针)。