ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java中的数据传递方式

2022-08-22 09:32:36  阅读:165  来源: 互联网

标签: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
来源: https://www.cnblogs.com/yfmw/p/16611735.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有