老铁们,能具体解释一下吗?

import java.util.Arrays;
public class Demo{
    private String str="1234";
    private char[] chars={'a','b','c'};
    public static void main(String[] args){
        Demo demo=new Demo();
        System.out.println(demo.str+"  "+ Arrays.toString(demo.chars));
        change(demo.str,demo.chars);
        System.out.println(demo.str+"  "+ Arrays.toString(demo.chars));
    }
    public static void change(String str,char[] chars){
        str="5678";
        chars[2]='b';
    }
}
全部评论
String 是对象,ch是数组 change的时候在字符串缓冲池当中创建了新的对象,但是并不改变原来的,当函数执行完毕的时候返回后对应的虚拟机也出栈了,5678 已经没用了,连个引用都不剩下 数组是因为在参数传递的时候用的是地址,直接修改存储的数值,所以修改的值会被保留
点赞 回复 分享
发布于 2017-09-23 16:26
上条解释错了,java的所有参数传递都是值传递,这个你试一下就知道了
点赞 回复 分享
发布于 2017-09-23 16:23
string是final类
点赞 回复 分享
发布于 2017-09-23 16:22
看书去,参数传递
点赞 回复 分享
发布于 2017-09-23 16:21
change()把堆里面的地址传递给栈,栈里面可以通过这个地址访问堆里面的对象,进入对象内部修改内容,但是一旦修改栈里引用的指向,只会修改栈里指向的地址
点赞 回复 分享
发布于 2017-09-23 16:21

相关推荐

面了这么多场试,总有公司总喜欢压力面一个小时面试+手撕,哪里不会就点哪里,说了不会不会还继续追着问不尊重求职者,稍微有些细节记不清了,就开始怀疑项目真实性以及人格让求职者开摄像头但是自己不开,说话声音还贼小,pardon几次就开始不耐烦的不知道这个算不算,手撕的时候,面试官人跑了。。。最后快结束才来
一纸丿繁华丶:你换位思考一下,自己在职场被领导push麻了,身心俱疲,现在有个机会让你放松一下,体验一把上位者的感觉,还能看着那些高学历人才、未来自己的竞争者,抓耳挠腮、手足无措的样子,没给你当场笑出来就不错了,理解一下面试官吧。
点赞 评论 收藏
分享
05-29 22:11
门头沟学院 Java
Elastic90:抛开学历造假不谈,这公司的招聘需求也挺怪的,Java开发还要求你有图文识别、移动端开发和c++的经验,有点逆天了。
点赞 评论 收藏
分享
强大的马里奥:我初中同学,没上高中,搞直播,现在提奔驰S450了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务