java传值与传引用问题总结

RK3588适配Ubuntu系统 RKsdk上支持buildroot以及Debian系统,但是Ubuntu需要自己移植,有很多公司都移植好了可以直接用,这里就总结记录一下我制作Ubuntu的过程。 阅读详情

1.基本类型与引用类型区别
对于基本类型(int , long , short , double , char , byte , float , boolean ),变量直接保存数据的值;
对于引用类型,变量保存的是对象的地址,由此地址指向实际对象。如图:

int a=10
String ss="hello world";

这里写图片描述

对于基本类型,直接传值,方法里进行重新赋值不会导致原值改变:

public class Test {
    public static void change(int n){
        n=10;
    }
    public static void main(String[] args) {
        int n = 0;
        change(n);
        System.out.println(n);
    }
}

输出:0

public class Test {
    public static void change(String n){
        n += "world";
    }
    public static void main(String[] args) {
        String n = "hello";
        change(n);
        System.out.println(n);
    }
}

输出:hello
String是引用类型,按理说应该方法中的值会改变原来的值,但是这里输出的是hello。因为String这种引用类型比较特殊,其实传入方法的是一个副本,不管方法内怎么改变String的值,都是使副本指向了这个string 值。
这里写图片描述
main方法内的n一开始指向的是hello这块数据,调用change方法时,传入的是n的一个副本,相当于重新new 一个String,所以对其的操作并不会对外面的n造成影响。

2.数组

public class Test {
    public static void change(char[] c, int[] ii) {
        c[0] = 'g';
        ii[0] = 8;
    }

    public static void main(String[] args) {
        char[] c = { 'a', 'b', 'c' }; // 数组
        int[] ii = { 1, 2, 3 };// 数组
        change(c,ii);
        System.out.println(c[0] + " " + ii[0]);

    }
}

输出:g 8
数组也是引用类型,传入的是引用,在方法内操作会改变原始值。

3.对于对象


public class Test {
    public static void change(Student s) {
        s.name = "lisi";
    }

    public static void main(String[] args) {
        Student s = new Student();
        s.name = "zhangsan";
        change(s);
        System.out.println(s.name);

    }
}

class Student {
    String name;
}

输出: lisi
对象是引用类型,会改变原始值~
再看个例子:


public class Test {
    public static void change(Student s) {
        s = new Student();
        s.name = "lisi";
    }

    public static void main(String[] args) {
        Student s = new Student();
        s.name = "zhangsan";
        change(s);
        System.out.println(s.name);

    }
}

class Student {
    String name;
}

输出: zhangsan
这个传入的虽然是引用类型,但方法内部改变了原对象的指向,方法内操作的相当于一个新的对象。所以不会改变原对象的属性。
这里写图片描述
传入时,方法内s 跟main方法内的s都是指向zhangsan,当change方法里面重新new 一个Student并赋值后,change方法里的s已经指向了一个新的对象,main方法里还是指向原来的对象,并不会因为change方法里的操作做任何改变。

最后一个:


public class Test {
    public static void change(Student s) {
        s = new Student();
        s.name = "lisi";
    }

    public static void main(String[] args) {
        Student s = new Student();
        s.name = "zhangsan";
        change(s);
        System.out.println(s.name);

    }
}

class Student {
    static String name;
}

输出: lisi
这个例子相比上个例子就是将Student的name属性变成了static,全局变量了,这样即使在change方法内重新new了一个对象,指向不同,也还是会改变这个属性的,道理很简单, 全局变量啊!

App 抓包难?Frida Hook 实战:绕过 SSL Pinning (证书绑定) 抓取某大厂 App 核心接口 当我们使用 Charles 抓包 HTTPS 时,本质上是实施了MITM(中间人攻击)。Charles 伪装成服务器,发给 App 一个自己的证书(伪造证书)。Charles 伪装成 App,拿着真正的证书去请求服务器。如果 App 只是简单校验“证书是否由受信任的 CA 签发”,那你把 Charles 的根证书安装到手机系统里,就能骗过它。但是,是 App 内置了服务器证书的Hash(指纹)。 阅读详情

相关推荐

UEFI开发探索102 – ACPI探究01(UEFI配置表)

(请保留-> 作者: 罗冰 https://blog.youkuaiyun.com/luobing4365) ACPI探究01(UEFI配置表)1 大致规划2 UEFI Configuration Table(配置表)3 代码实现 最近有项工作,是修改ACPI表。问题本身并不复杂,但是由于代码需要移植到Option ROM上,遇到不少奇怪的现象。因此,花了不少时间,对ACPI进行研究。 任务是完成了,我的好奇心又被勾起来了。准备发挥“格物致知”的信念,把我认为的ACPI各方面的知识,好好地捋一捋。 1 大

8247

在java方法中改变传递的参数的值

刚在写一个用例,需要在方法中改变传递的参数的值,可是java中只有传值调用,没有传址调用。所以在java方法中改变参数的值是行不通的。但是可以改变引用变量的属性值。 可以仔细理解一下下面几句话: 1、对于基本类型参数,在方法体内对参数进行重新赋值,并不会改变原有变量的值。 2、对于引用类型参数,在方法体内对参数进行重新赋予引用,并不会改变原有变量所持有的引用。  3、方法体内对参数进行

Maxwell_7 3万+

超声波清洗机拆解实录:从电路板到换能器,一文看懂内部构造(附高清图)

本文详细拆解了超声波清洗机的内部构造,从电路板设计到换能器工作原理,揭示了其核心技术。通过高清图片和详细分析,展示了功率放大电路、高频变压器及压电换能器等关键部件,为电子爱好者和维修技术人员提供了实用的故障诊断和元件二次利用指南。

grape的博客 1183

java中布尔函数使用规则_java布尔值不在被调用方法中更改

参见英文答案 >Change boolean Values?4个我有一个场景,我想设置一个布尔对象,然后在方法中的构造函数中使用它的booleanValue().但是,设置对象的范围是不同的.它是在方法调用的方法中设置的,其中首先实例化对象.基于我对Java如何传递原始和对象参数以及如何在线阅读多个帖子(例如this)的...

weixin_42477197的博客 1293

petalinux i2c的配置

1.硬件平台配置 1.内核配置 cd petalinux-config -c kernel -> Device Drivers -> I2C support -> i2C Hardware Bus support -> Xilinx I2C Controller Pressing 启用CONFIG_I2C_XILINX=y 2.修改用户设备树 cd cd project-spec/meta-user/recipes-bsp/device-tree/files/ i2c2:

u013403954的博客 4313

【WRF运行报错】总结WRF运行时报错及解决方案(持续更新)

总结WRF运行时报错及解决方案(持续更新)

WW、forever的博客 1630

java传参的两种方式

前言: 如果一个变量是基本类型 比如 int hp = 50; 我们就直接管hp叫变量 =表示赋值的意思。 如果一个变量是类类型 比如 Hero h = new Hero(); 我们就管h叫做引用。 =不再是赋值的意思 =表示指向的意思 比如 Hero h = new Hero(); 这句话的意思是 引用h,指向一个Hero对象 1 基本类型传参(int,boolean,char等) 当传参类型为基本类型时,方法内无法修改方法外的基本类型参数。 运行程序 血瓶的值还是100,并没有改变。 2 类类型传参

一个没用的fw的博客 3169

回归预测 | MATLAB实现MPR多元多项式回归

回归预测 | MATLAB实现MPR多元多项式回归

机器学习之心的博客,关注并私信文章链接,获取对应文章源码和数据。 1645

关于Boolean类型的值再赋值一个true或者false.

一段code:boolean m = false;if(m = false){        System.out.println("false");}else{        System.out.println("true");}编译结果为true。编译前思考:第一句:把Boolean类型变量m赋值为false;  OK.没问题。2:一个if语句:但if表达式中是再次对m变量进行赋值。而不是一...

weixin_42370303的博客 2万+

有趣的方式学习DDR5(4)—— DDR5 SDRAM 启动与初始化过程全攻略

🟢。

weixin_43199439的博客 1623

网络工程师面试题汇总(二)

网络把主机连接起来,而互连网(internet)是把多种不同的网络连接起来,因此互连网是网络的网络。而互联网(Internet)是全球范围的互连网。因为网络层是整个互联网的核心,因此应当让网络层尽可能简单。网络层向上只提供简单灵活的、无连接的、尽最大努力交互的数据报服务。使用 IP 协议,可以把异构的物理网络连接起来,使得在网络层看起来好像是一个统一的网络。地址解析协议 ARP(Address Resolution Protocol)

悦分享 184

boolean值方法执行后未改变

boolean值方法执行后未改变,这是因为在Java中,基本数据类型(如boolean)是按值传递的。将flag传递给check方法时,实际上是传递了flag的一个副本,而不是原始变量本身。因此,在方法内部对flag进行修改不会影响到方法外部的flag值。要解决这个问题,可以将flag封装在一个对象中,或者使用一个数组、集合等数据结构来存储flag。

qq_45557905的博客 413

osg中显示3dtiles和cesiumIon

如下图为CesiumTilesetNode数据更新相关代码,将OSG对应的ViewMatrix、ProjectionMatrix和窗口信息传递给tileset->updateView()实现Cesium-native的场景更新。整体结构,其中 CesiumTilesetNode依赖Cesium3DTilesSelection::Tileset,实现数据的更新以及确定需要绘制的节点。1.1 CesiumNative3DTileslayer图层。

CPWWHSU的博客 889

Java中引用传值问题

一图胜万言(配上一张启舰大神的图,一个自定义控件写的很吊的大神):今天花了一整天去实现一个项目功能,果然只搞理论是不行的,距离上一次写项目已经快有半年了,今天无论是效率还是熟练度都大不如前,》》》好了言归正传,今天要说的这个问题其实很简单——在方法中的参数传递问题。(其实我承认,这个地方我只是知道对象传引用、普通类型传值,典型的理论派-。+),但是这个问题可大可小,我觉得还是要把这些缕得清清楚楚才...

zy_jibai 6334

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

从leetcode 88题 思考Java中引用与传值问题

从leetcode 88题 思考Java中引用与传值问题 函数如下 给定nums1与nums2 将两个数组合并并将结果放到nums1中。 public void merge(int[] nums1, int m, int[] nums2, int n) { int[] tar=new int[m+n]; int count=0; int i...

qq_42239081的博客 287

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

java中的经典问题:传值与传引用

参数传递的秘密  知道方法参数如何传递吗?  记得刚开始学编程那会儿,老师教导,所谓参数,有形式参数和实际参数之分,参数列表中写的那些东西都叫形式参数,在实际调用的时候,它们会被实际参数所替代。  编译程序不可能知道每次调用的实际参数都是什么,于是写编译器的高手就出个办法,让实际参数按照一定顺序放到一个大家都可以找得到的地方,以此作为方法调用的一种约定。所谓“没有规矩,不成方圆”,有了这个规

江南听雨 2万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

关于java函数传值还是传引用的经典问题

看到的一个解释这个问题的帖子,有那么点意思啊呵呵: 经典的问题,但却不容易弄懂,尤其对有c基础的java程序员来说,更容易引起混乱,这里我试图简单点描述。“java函数是传值的,java函数传递的参数是对象的引用”这两句话好像初听上去有些矛盾,但却是事实,因而引起很多初学者的混乱。在这里我试图据个简单的例子来说明java的这个特性,可能不全面,希望大家来补全。public class Test

浩瀚的海洋 1473

Java 传值与传引用地址问题

Java 传值与传引用地址问题传值与传地址的区别基本数据类型作为方法的的参数引用数据类型(对象类型)作为方法参数总结 传值与传地址的区别 基本数据类型和引用数据类型作为方法参数传递是有所区别的 基本数据类型作为参数传递,传递的是真正的值 引用数据类型作为参数传递,传递的其实是一个引用地址,地址指向的地方才是真正我们用到的值 基本数据类型作为方法的的参数 public class MainClass { public static void main(String[] args) { int

Litle_k的博客 295

JAVA方法的参数传值,传引用的问题

先说结论: JAVA只有传值,没有传引用 有些小伙伴误以为有传引用,是因为: 再看几个例子: Example 1 : 结果: 解析: example 1 在swap方法中,a、b的值进行交换,并不会影响到 num1、num2。因为,a、b中的值,只是从 num1、num2 的复制过来的。也就是说,a、b相当于num1、num2 的副本,副本的内容无论怎么修...

yxpandjay的博客 530

java引用类型传值还是地址问题

java引用类型传值还是地址问题; 特殊应用类型八大基本包装类和String虽然是引用类型,但是参与运算时,依旧传值,其他引用类型传递地址,基本数据类型传递地址。 ...

qq_37596695的博客 582

java函数传值还是传引用的问题

以前对这种东西就是硬记下来,但是自己完全没有真正理解,今天写代码的时候突发奇想测试了一下,恍然大悟。 就三句话: 第一:java方法基本数据类型是传值,对象类型传引用,这是千真万确的。 第二:当参数是对象时,无论方法体内进行了何种操作,都不会改变实参对象的引用。 第三:当参数是对象时,只有在方法内部改变了对象的内容时,才会改变实参对象内容。 关于第一点,不

curlyujian的专栏 541

Java工作笔记-Java函数参传值传引用问题

目录 基本概念 代码与实例 源码打包下载 基本概念 最近的系统中,Java程序和C++程序混着,很多程序都是用Java搞的,不得不稍微研究下Java的细节,其中很关键的一点,就是如何在Java中传引用,因为要接收一些值,在代码中试了,用&这个玩意是没有效果的。 下面给出Java程序中函数传参数,哪个是传值, 这里发现,如果是基本数据类型:int这种,都是传值...

IT1995的博客 5091

Java传值传引用的问题

private static void sub(List<String> lists){ lists = lists.subList(0,1); } public void recall() { List<String> strings = new ArrayList<String>() {{ ...

songchenglu123的博客 118

图解一文搞定java传值还是传引用问题

图解一文搞定java传值还是传引用问题:终极超级根源版本

a935668820的博客 201

Java中关于引用类型传值的例题_【转】Java经典问题:传值与传引用?

Java到底是传值还是传引用?相信很少有人能完全回答正确。通常的说法是:对于基本数据类型(整型、浮点型、字符型、布尔型等),传值;对于引用类型(对象、数组),传引用。基本类型传值,所有人都不会对此有疑义;问题出在引用类型上。为引入正题,不妨先看看下面的例子,你能正确给出程序的运行结果嘛?1 /**2 * @(#)Swap.java3 *4 *5 *@author6 *@version1.00 20...

weixin_34677884的博客 201

java 传参引用怎么写_Java传参问题——传引用还是传值???

首先非常确定地说:如果你对“传引用”、“传值”的理解是来源于C 或 C++中指针问题的话,那么Java的参数传递就是传值!想到考虑这个问题是在读java.util的Timer源码时看到了这几条语句TimerTask tmp = queue[j]; queue[j] = queue[k]; queue[k] = tmp;刚一看是正常的交换语句,但一想难道不是“Java的所有对象皆为引用”吗?这样的...

weixin_32392867的博客 184
上一篇: 利用系统内存的一个小技巧
下一篇: 总结
JustForSS
博客等级 码龄13年 7粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值