项目场景:
关于java里面 等号= 到底是一个什么作用 。今天碰到了就简单的总结一下
问题描述:
String s = “Hello world!”;
在java里面 我们是先声明了一个引用 这个引用指向的是一个string类型的对象 那么我现在有了第二个s–》s2
这个string s2 =s 这我们又该如何理解呢 这个s2 是一个引用 指向了s 而这个s 也是引用 指向了一个字符串
那么 如果我现在来更改这个s2 他会是怎么去操作呢 他会先更改自己的引用 s s再更改自己的引用 string对象
这样 如果我们更改s 或者s2都会导致两个都被更改
回到我的问题 在java里面 我有一个模拟的链表 里面有一个节点 节点的成员包括了下一个节点 还有数据 那么 我现在来一个新的节点 进行插入到首部 我直接把这个新节点的next=node 能成功吗?
看一下这个数据会怎么操作 Node newNode
newNode,next=Node;
能成功
那么我如果插入到中间呢?
newnode=node.next
node.next=newnode.next
很明显不能
node.next是nextnode newnode=node.next就意味着nextnode被赋值给了newnode
要明确 声明只是一个引用 具体引用的就是内存里面的对象 对声明的更改最后都会落实到内存里面的对象 所以要明确更改到底改的是什么。
附上百度解答
问题1
我声明了什么!
String s = “Hello world!”;
许多人都做过这样的事情,但是,我们到底声明了什么?回答通常是:一个String,内容是“Hello world!”。这样模糊的回答通常是概念不清的根源。如果要准确的回答,一半的人大概会回答错误。
这个语句声明的是一个指向对象的引用,名为“s”,可以指向类型为String的任何对象,目前指向"Hello world!"这个String类型的对象。这就是真正发生的事情。我们并没有声明一个String对象,我们只是声明了一个只能指向String对象的引用变量。所以,如果在刚才那句语句后面,如果再运行一句:
String string = s;
我们是声明了另外一个只能指向String对象的引用,名为string,并没有第二个对象产生,string还是指向原来那个对象,也就是,和s指向同一个对象。
我的理解:字符串的底层真实实现,还是和C一样,用的数组来存储多个char类型的字符,所以可以理解成声明一个数组,因为数组是多个内存地址的集合,你想想,那么多地址,如果是直接赋值,该存哪个地址哇?