博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java不是百分之百面向对象_java方法传值还是传引用的问题
阅读量:5868 次
发布时间:2019-06-19

本文共 1041 字,大约阅读时间需要 3 分钟。

最开始学习java的时候,老师跟我们说java中没有指针,=可以理解为指向,当时关于方法传参是值传递还是引用传递老师都有讲过,但是后来工作之后,时间越长好多基础的东西反而忘得越多,今天碰巧想起关于传值还是传引用的问题,整理了一下顺便记录下.

先看下边的代码:

public static void main(String[] args) {

int a = 1;

add(a);

System.out.println(a);

}

static void add(int value) {

value++;

}

最后打印的结果是1,value++并没有对a生效.

而下边的代码:

public static void main(String[] args) {

StringBuilder a = new StringBuilder("abc");

add(a);

System.out.println(a);

}

static void add(StringBuilder value) {

value.append("x");

}

打印结果是 abcx,append方法对a生效了,这是为什么呢?Java是面向对象语言,但是却不是百分之百面向对象语言,因为java中有四大基本数据类型,整形(byte,short,int,long),浮点型(float,double),字符型char,布尔型boolean,在方法传参的时候四大基本数据类型是传递值,对象则是传递引用.这样就很好的解释了上面两段程序.

而下面这段程序:

public static void main(String[] args) {

String a = "abc";

change(a);

System.out.println(a);

}

static void change(String value) {

value = "xxx";

}

打印出来的依然是 abc,String是对象,传参是传递引用,但是为什么改动没生效呢?因为不论传递值还是传递引用,都是将方法参数中的value进行指向,传递值就会在内存中复制出一个相同的值,然后value指向这个新的值,所以改动不生效.传递引用则是将value指向传进来参数的内存地址,例子二中的append方法生效.但是例子三中,值刚传进来的时候是将value指向了a的地址,但是value又重新指向了一个新开辟的内存空间,对a是没有影响的,所以不会影响a的结果.

转载地址:http://jftnx.baihongyu.com/

你可能感兴趣的文章
kindeditor 上传文件控件优化下。。
查看>>
一篇读懂深度学习中「训练」和「推断」的区别
查看>>
推论统计2-T测试
查看>>
只有程序员能看懂的西游记
查看>>
删除任何文件
查看>>
手机传感器
查看>>
webSocket前台实现
查看>>
tomcat8常用配置说明
查看>>
SaltStack 2014.1.4 Windows minion 端安装后无法启动的问题解决
查看>>
找回消失的网站网页
查看>>
快速掌握Eclipse Plugin / RCP开发思想
查看>>
Java 多线程写文件
查看>>
我用了两个月的时间才理解 let
查看>>
[JS] this, 你到底指向谁?
查看>>
jdbc连接DB2数据库超时的问题
查看>>
小菜学设计模式——模板方法模式
查看>>
流的补充及内存流字符编码
查看>>
PSR 类自动加载规范的翻译与看法
查看>>
浅谈Asp.net的sessionState
查看>>
时间序列DEMO
查看>>