首页 > 编程语言 >java中的数据传递方式

java中的数据传递方式

时间:2022-08-22 09:35:26浏览次数:70  
标签:java String 方式 System name 传递 user println out

java的传值方式

目录


结论

首先说结论:java基本是值传递

分析

关于这个问题,其实一直以来都很有争论的,我也是为此查询了很多资料,在此发表一下自己的拙见。

我们从内存出发,两者的区别其实就是操作一块内存和新开辟一块内存的区别,知道了这个我们来看看“值传递”与“引用传递”这两个专有名词的意义

  • 值传递: 会在传值过程中,将自身拷贝(复制)一份,赋给给新建的(临时)变量
  • 引用传递:在传值过程中,本身其实并不会传递,传递的是实际参数的隐式引用

接下来我们分别试一下基本数据类型和引用数据类型(以下直接用对象称呼)以及String

基本数据类型

    public static void updata(int value){
        value = 100;
        System.out.println("形参" +value);
    }
    public static void main(String[] args) {
        int a = 50;
        System.out.println("a" +a);
        updata(a);
        System.out.println("a在执行函数updata后:"+a);
    }

执行结果

a50
形参100
a在执行函数updata后:50

基本数据类型为值传递,因此在方法内部修改的只是形参,在方法执行结束后,形参也被销毁,a并无任何改变

看看自己定义的对象

public class User {
    int id;
    String name;
    int age;

    public User(int id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }
    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
 }

    public static void updataUser(User user){
        user.setId(2);
        user.setName("asd");
        user.setAge(25);
        System.out.println(user);
        System.out.println(System.identityHashCode(user));
    }
    public static void main(String[] args) {
        User user = new User(1,"qwe",24);
        //没有重写toString,会打印地址
        System.out.println(user);
        System.out.println(System.identityHashCode(user));
        updataUser(user);
        System.out.println(user);
        System.out.println(System.identityHashCode(user));

    }

    

结果如下:

User{id=1, name='qwe', age=24}
460141958
User{id=1, name='qwe', age=24}
User{id=2, name='asd', age=25}
460141958
User{id=2, name='asd', age=25}
460141958

可以看出实参与形参的地址是一模一样的,数据修改是直接在源数据进行修改的

public static void main(String[] args) {
        // TODO Auto-generated method stub
        String str = "data1";
        String str2 = new String("data2");
        StringBuffer buffer = new StringBuffer("data3");
        System.out.println("!!!!!1 str:=" + str + " str2:=" + str2
                + " buffer:=" + buffer.toString());
        dealData(str, str2, buffer);
        System.out.println("!!!!!2 str:=" + str + " str2:=" + str2 + " buffer:=" + buffer.toString());
    }
    private static void dealData(String str, String str2, StringBuffer buffer) {
        str += "123";
        str2 += "123";
        buffer.append("123");
        System.out.println("nerborn: str:=" + str + " str2:=" + str2 + " buffer:=" + buffer.toString());
    }

标签:java,String,方式,System,name,传递,user,println,out
From: https://www.cnblogs.com/yfmw/p/16611735.html

相关文章

  • JavaScript实现数字前补“0”的五种方法示例
    来自:https://www.jb51.net/article/153945.htm侵删<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-trans......
  • Java SE 17 新增特性
    JavaSE17新增特性作者:Grey原文地址:JavaSE17新增特性源码源仓库:Github:java_new_features镜像仓库:GitCode:java_new_featuresSealedClasses正式启用Sealed......
  • JavaIO流
    JavaIO流一、流的概念内存与存储设备之间传输数据的通道。例如在内存中的程序,想要读取硬盘中的文件,必须借助流;在水库中的水流入家庭中(存储设备到内存)二、流的分类按方......
  • mybaits-plus+druid 使用 LocalDateTime 出现nested exception is java.sql.SQLFeatur
    解决方案一(推荐)目前druid已经修复了这个问题并提交了新版本,最优直接选择升级druid至1.1.21或以上releases版本地址 https://github.com/alibaba/druid/releases/tag/......
  • JavaScript快速入门-04-运算符
    4运算符4.1算术运算符4.1.1概述  JavaScript提供的算术运算符如下所示:类型符号示例加法运算符+a+b减法运算符-a-b乘法运算符*a*b除......
  • Java SE 16 新增特性
    JavaSE16新增特性作者:Grey原文地址:JavaSE16新增特性源码源仓库:Github:java_new_features镜像仓库:GitCode:java_new_features使用反射执行接口中的默认实现方......
  • Java注解
    1.注解入门1.1Annotation位于源码中(代码/注释/注解),使用其他工具进行处理的标签注解用来修饰程序的元素,但不会对被修饰的对象有直接的影响只有通过某种配套的工具才......
  • Java基础练习题-错题集(一)
    (1)下面代码输出结果是?classC{C(){System.out.print("C");}}classA{Cc=newC();A(){this("A");System.o......
  • Elasticsearch Java client使用
    前言Elasticsearch官方列出了好几个客户端,如下所示JavaClientJavaRestClient(JavaHighLevelRESTClient)JavaTransportClient其中JavaRestClient在7.15.0被......
  • 《Java周边》IDEA操作说明
    1. setting设置1.1设置字体大小:1.2设置文件层级1.3编码设置 设置默认值:1.4设置注释模板1.5属性断点1.6异常断点1.7条件断点1.8调试(强制调用......