• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Java > java中参数传递方式详解

java中参数传递方式详解

作者:polly 字体:[增加 减小] 来源:互联网 时间:2017-05-28

polly 通过本文主要向大家介绍了java参数传递方式,java参数传递,java参数传递机制,java函数参数传递,java方法参数传递等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

java中参数传递方式详解

java新手入门面临的一个经典的话题,本文意在终结这个话题,java中有说法:Java里面参数传递都是按值传递,怎么理解这句话?用文字说明恐怕不容易说明白,说明白恐怕也难以想明白。

前提

先明确一下,按值还是按引用的概念,它是来自c++语言,引用不是汉语词典中的一个词,而是c++的概念——“&”这个符号还记得吧?

为什么有这个话题呢?其一,是对按引用传递理解不透彻;其二,诸多java书籍及讨论论点并没有切中要害。

一句话概括,按值传参还是按引用传参,既然是参数传递方式,那么只针对形参和实参,这里说的是参数本身,不是参数对象的子对象或孙子对象。

有了前提,上c++代码:

#include <iostream>

using namespace std;

class User
{
 private:
  int m_id;
 public:
  User(int id=0){m_id = id;}
  void setId(int id){m_id = id;}
  int getId(){return m_id;}
};

void test0(User t){//按值传参
 User s;
 t = s;
 t.setId(1002);
 cout << "test1:" << t.getId() << endl;
}

void test1(User *t){//按值传参
 t = new User();//指针指向了一个新对象,外面实参没变
 t->setId(1002);
 cout << "test1:" << t->getId() << endl;
}

void test2(User* & t){//按引用传参
 t = new User();//指针指向了一个新对象,外面实参也跟着变了
 t->setId(1002);
 cout << "test2:" << t->getId() << endl;
}

int main(int argc, char const *argv[]) {
 cout<< "\npass by ref:"<<endl;
 User* t = new User();
 t->setId(1001);
 cout << t->getId() << endl;
 test2(t);
 cout << t->getId() << endl;

 cout<< "\npass by value:"<<endl;
 t = new User();
 t->setId(1001);
 cout << t->getId() << endl;
 test1(t);
 cout << t->getId() << endl;
 return 0;
}

</div>

输出结果:

pass by ref:
1001
test2:1002
1002

pass by value:
1001
test1:1002
1001

</div>

c++小结:

按值传递,那么在函数内修改了形参指向一个新对象,外面的实参不受影响。

按引用传递,那么在函数内修改了形参指向一个新对象,外面的实参也变了。

旨在说明问题,代码可能有内存泄漏。

上java:

package com.pollyduan.bean;

@Data
public class User {
 private Integer id;

 public static void testObject(User t){
  t=new User();//指向了一个新对象,外面实参没变
  t.setId(1002);
  System.out.println("testObject="+t);
 }

 @Test
 public void testObject(){
  User user=new User();
  user.setId(1001);
  System.out.println("user="+user);
  testObject(user);
  System.out.println("user="+user);
 }
}

</div>

输出结果:

user=User(id=1001)
testObject=User(id=1002)
user=User(id=1001)
</div>

java小结:

跟c++的逻辑比较一下,请自行对号入座。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • java中参数传递方式详解

相关文章

  • 2017-05-28Spring boot实现文件上传实例(多文件上传)
  • 2017-05-28java 指定某个jdk版本方法
  • 2017-05-28Java正则判断日期格式是否正确的方法示例
  • 2017-05-28Spring2.5.6开发环境搭建图文教程
  • 2017-05-28eclipse/intellij idea 查看java源码和注释方法
  • 2017-05-28java中List、Array、Map、Set等集合相互转换
  • 2017-05-28javaweb在线支付功能实现代码
  • 2017-05-28Java 中的 BufferedWriter 介绍_动力节点Java学院整理
  • 2017-05-28java数据结构与算法之简单选择排序详解
  • 2017-05-28Spring MVC 基于URL的映射规则(注解版)

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Mybatis开发环境搭建实现数据的增删改查功能
    • SpringMVC集成Swagger实例代码
    • Java中的对象流总结(必看篇)
    • java数组、泛型、集合在多态中的使用及对比
    • Java操作另一个Java程序使其重启的简单实现
    • 浅析Java 数据结构常用接口与类
    • Spring事务Transaction配置的五种注入方式详解
    • Java微信公众平台开发(1) 接入微信公众平台
    • 使用Java 8中的Lambda表达式实现工厂模式
    • OutOfMemoryError系列(1):Javaheapspace

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有