final修饰的变量是引用不能改变还是引用的对象不能改变

mabl:AI原生测试自动化平台的基础使用 mabl是一个基于人工智能和机器学习的云原生测试自动化平台。它通过使用先进的技术,如机器学习,自动创建和执行测试,自动分析测试结果,并根据需求的变化自动适配和维护测试。这样的自动化过程极大地提高了软件测试的效率和准确性。mabl的口号是 “You write code, mabl tests”,意味着开发者只需关注编写代码,而测试工作则可以交给mabl来完成。mabl的平台支持多种测试类型,包括 Web、App、Api、可访问性和性能测试,使得团队能够更快速、更有信心地发布软件。 阅读详情

我们都知道final修饰变量时 会变为常量,但是使 用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?

下面让我们来看这段代码:

[java]  view plain  copy
  1. /** 
  2.  * 验证final修饰的变量是引用不能变,还是引用的对象不能变 
  3.  * StringBuilder 线程不安全 但速度快 
  4.  * 引用初始化以后不能被改变 --- 不是指变量的值不可变,而是指向的变量地址不可变 
  5.  * @author Tomato 
  6.  * 
  7.  */  
  8. public class TestFinal {  
  9.     public static void main(String[] args) {  
  10.         final StringBuilder sb = new StringBuilder("haha");  
  11.         //同一对象的hashCode值相同  
  12.         System.out.println("sb中的内容是:"+sb);  
  13.         System.out.println(sb+"的哈希编码是:"+sb.hashCode());  
  14.         sb.append("我变了");  
  15.         System.out.println("sb中的内容是:"+sb);  
  16.         System.out.println(sb+"的哈希编码是:"+sb.hashCode());  
  17.           
  18.   
  19.         System.out.println("-----------------哈希值-------------------");  
  20.         TestFinal test = new TestFinal();  
  21.         System.out.println(test.hashCode());  
  22.         System.out.println(Integer.toHexString(test.hashCode()));  
  23.         System.out.println(test.getClass()+"@"+Integer.toHexString(test.hashCode()));  
  24.         System.out.println(test.getClass().getName()+"@"+Integer.toHexString(test.hashCode()));  
  25.         //在API中这么定义toString()等同于 getClass().getName() + '@' + Integer.toHexString(hashCode())  
  26.         //返回值是 a string representation of the object.  
  27.         System.out.println(test.toString());  
  28.     }  
  29. }  
代码结果是:

sb中的内容是:haha
haha的哈希编码是:1928052572
sb中的内容是:haha我变了
haha我变了的哈希编码是:1928052572
-----------------哈希值-------------------
1398828021
53606bf5
class TestFinal@53606bf5
TestFinal@53606bf5
TestFinal@53606bf5

可以看出StringBuilder中的内容变了 而所指向的哈希编码却没发生变化,在Java中每一个对象都有自己独一无二的哈希编码,根据这个编码就可以找到相关的对象,也就是说,根据这个编码你可以独一无二地确定这个对象。
因而使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。


总得来说对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。

YOLO26原创自研: 魔改Bottleneck,具备多尺度和特征通道融合的结构 魔改Bottleneck,具备多尺度和特征通道融合的结构,该模型在检测准确性方面都取得了良好的效果,尤其在缺陷检测方向。 阅读详情

相关推荐

GPS定位不准?可能是GDOP在作怪!手把手教你优化卫星几何分布

本文深入解析了GPS定位精度不佳的常见原因——几何精度因子GDOP。通过剖析卫星几何分布对定位误差的放大效应,文章提供了从理解GDOP、PDOP、HDOP等关键指标,到使用专业APP实时诊断卫星天空图,再到利用在线工具提前规划最佳定位时机的完整实战指南。旨在帮助户外爱好者、无人机飞手及专业用户主动优化卫星几何条件,从而显著提升定位可靠性。

weixin_29062823的博客 306

使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变

被final修饰的变量其实就相当于定义了一个常量,无法被修改的变量: 如果final修饰的是一个基本数据类型的变量,那么这个变量的值就定了,不能变了, 如果修饰的是一个引用变量,那么该变量存的是一个内存地址,该地址就不能变了,但是该内存地址所指向的那个对象还是可以变的,就像你记住了人家的门牌号,但你不能管人家家里人员数量 还有的人给方法定义的参数是 final类型的,是不想别人在方...

qq_41555783的博客 317

BMW Standard Tools 宝马FSC工具套装下载

这是一款非常专业的一套宝马编码工具,懂行的人自然知道他的用处,不懂行的人,我解释再多也不会明白的,需要的拿去吧。软件名:BMW Standard Tools包含工具:BMW Coding Tool v2.50、change Language、CIC Mafia、Dr.Gini B021、EasyConnect、EDIABAS Konfigurator v1.1、EDIABAS Konfigurator v2.0.0、FSC-Tools_2.18、FSTool_v2_CarServer、INPA、ITool

Zj_arrow的博客 7008

final关键字

final基本作用: final 修饰类,类不能被继承 final 修饰方法 ,方法不能被覆盖 final 修饰基本类型变量,变量不能被修改 final 修饰引用变量,变量指向的那个对象是不能改的(就是一直指向某一个对象),但是被指向的对象的属性是可以改变的。 final变量初始化: final修饰成员变量: 1. 在定义时直接赋值 ...

七月听雪的博客 151

三相电机控制中的端电压、相电压与线电压波形解析

本文深入解析了三相电机控制中端电压、相电压与线电压的核心概念与波形差异。通过对比方波控制、SPWM和SVPWM三种主流控制策略下的实测波形特征,揭示了不同控制逻辑对电压波形(如梯形波、正弦波、马鞍波)的影响。文章重点阐述了SVPWM控制如何通过生成马鞍波形端电压来提高直流母线电压利用率,并提供了实用的波形测量与调试指南,帮助工程师深入理解电机控制原理并进行有效调试。

qsc901234567的博客 1403

寒假实训笔记day01——认识M4单片机之STM32F405RGT6

认识M4单片机之STM32F405RGT6(含义、规格、参数)

weixin_47200070的博客 8551

java 线程参数 用final_在线程里使用线程外的变量为什么一定要是final类型

public class CyclicBarrierDemo {public static void main(String[] args) {/** 七龙珠* */CyclicBarrier cyclicBarrier = new CyclicBarrier(7,()->{System.out.println("召唤神龙");});for (int i = 0; i < 7; i++...

weixin_33048721的博客 1900

SPSS操作(五):主成分分析

1、将数据导入spss,并定义变量,将铁路运输业职工人数(人)、城市公共交通业职工人数(人)、邮政业职工人数(人)、电信和其他信息传输服务业职工人数(人)、客运量(万人)、接待入境旅游人数(万人次)、普通高校师生比(%)、星级住宿业营业额(亿元)分别定义为x1,x2,x3,x4,x5,x6,x7,x8 如图: 2、对数据进行标准化处理 ①选择【分析】—【描述统计】—【描述】 ②添加要标准化的变量,勾选【将标准化值另存为变量(Z)】,再点确定 ③返回原来的数据窗口就可以看见标准化后的变量了 3、SPS

My_daily_life的博客 8万+

final 修饰的变量 到底可不可变!!!

先上结论 被final修饰的基本类型变量(四类八种) 不可变!! 被final修饰的 引用类型变量 地址不可变!!!,内容可变!!! 被final修饰的引用类型变量,地址不可变!内容可变! 被final修饰的引用类型变量,地址不可变!内容可变! 被final修饰的引用类型变量,地址不可变!内容可变! 引用类型本质是指向一个地址,被final修饰后,不能改变他指向的地址,但可以改变地址内的内容 ...

RwTo的博客 3740

【灰度共生矩阵(GLCM)原理及代码实现】

文章主旨详细介绍灰度共生矩阵(Gray-Level Co-occurrence Matrix, GLCM)的生成原理、核心特征量及其在图像纹理分析中的应用,并提供了可运行的Python代码实现。该网页是一篇理论结合实践的优秀技术文章。它不仅清晰地解释了GLCM这一经典纹理分析工具背后的数学原理,还提供了完整、可复现的代码,非常适合计算机视觉或图像处理领域的学习者和开发者入门并实践灰度共生矩阵。读者可以通过运行代码来直观理解GLCM如何工作,并提取图像的纹理特征。

blotemj.blog.youkuaiyun.com 180

手把手教你学Simulink——基于Simulink的固态变压器(SST)多级协同控制

摘要:本文详细介绍了基于Simulink的固态变压器(SST)多级协同控制方法。SST作为新一代智能电网核心设备,通过AC-DC整流、DC-DC隔离和DC-AC逆变三级架构实现电能高效转换。针对多级耦合难题,提出能量-功率协同控制策略:纵向解耦电压环与功率前馈,横向联动级间功率指令。在Simulink中搭建10kV/400V系统模型,实现直流母线电压波动<2%的动态性能。特别设计了负载突变时的三级协同机制,通过虚拟惯性算法和前馈控制实现快速响应。文章包含完整的建模步骤、控制推导和参数设置,为电力电子工

MHD0815的博客 195

关于线程中变量值变化的问题

关于线程中变量值变化的问题 问题:如果在toy和moto中不加volatile那么匿名线程将陷入死循环阻塞生产者线程的执行。是因为匿名线程中每次获取的静态的toy和moto都是没有更新的值,因此不可能满足条件导致一直循环。 方式一:加了volatile这个修饰符后,线程就可以获取最终修改后的值了。 方式二:无意中发现一点,如果在获取的变量的值的局部范围内进行对值获取或判断,那么也是可以完成条件的。如下主方法中 volatile详细描述 public class ThreadTest { publ

x2425970538的博客 852

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

final修饰的变量是引用不能改变?还是引用的对象不能改变?

分析下面的例子: public class Demo { public static void main(String[] args) { final StringBuilder sb = new StringBuilder("haha"); //同一对象的hashCode值相同 System.out.println("sb中的内容是:...

qfc8930858的博客 901

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

final修饰的变量是引用不能改变,还是引用的对象不能改变

看代码: 1 package pnunu.oa.test; 2 3 public class TestFinal { 4 public static void main(String[] args) { 5 final StringBuilder sb = new StringBuilder("123"); 6 // ...

diaochifu3136的博客 508

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

final 引用 对象 java_[Java教程]final修饰的变量是引用不能改变,还是引用的对象不能改变...

[Java教程]final修饰的变量是引用不能改变,还是引用的对象不能改变0 2016-10-21 14:00:18看代码:1 package pnunu.oa.test; 2 3 public class TestFinal { 4 public static void main(String[] args) { 5 final StringBuilder sb = ...

weixin_35288487的博客 261

final修饰的变量是引用不能改变,还是引用的对象不能改变???构造器子类父类关系

总得来说对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。对于这个问题,我们不能只记结论,要拿实例说话,参看以下代码:public class Demo { public static void main(String[] args) { final StringBuil...

y_index的博客 782

final修饰变量

final修饰基本类型变量 当使用final修饰基本类型变量时,不能对基本类型变量重新赋值,因此基本类型变量不能被改变 final修饰引用类型变量 当使用final修饰引用类型变量时,它保存的仅仅是一个引用,final只能保证这个引用类型变量所引用的地址不会改变,即一直引用同一个对象,但这个对象完全可以改变 package com.j1803.finalTest; import ja...

weixin_30591551的博客 88

java面试篇10、使用 final 关键字修饰一个变量时,是引用不能变,还是引用的对象不能变?

对于基本数据类型,final确保变量的值不能改变。对于引用类型,final确保引用本身不能改变,但引用所指向的对象的内容可以改变。

weixin_45422672的博客 305

final修饰符使用中遇到的一些问题

final具有“不可改变”的含义,它可以修饰非抽象类、非抽象成员方法和变量。 - 用final修饰的类不能被继承,没有子类 - 用final修饰的方法不能被子类的方法覆盖(Override) - 用final修饰的变量表示常量,只能被赋值一次

stormkai的专栏 2625

Java中final修饰符的理解

记录一下今天复习的final修饰符,其中 final类的成员方法隐式被final修饰部分 仅代表我个人理解 总结如下: final有三种使用方法: 1、final修饰类 final修饰类表示这个类不能被继承, 这个类的成员变量可以选择性得用final修饰, 类的成员方法在继承角度来说可以理解为默认被final修饰, 因为java之前是可以用final使方法变为内嵌调用,以此来提高方法效率; 2、final修饰方法 final修饰方法表示这个方法被锁定,不能被任何类修改, 当一个方法被private修

qq_40894047的博客 4742

Java中final修饰参数的作用

在之前有总结过final关键字的用法。今天在面试时候,被提问到如题目所示的问题了,之前也遇见过但是没在意,遂在此记录一下,当做学习。 在方法参数前面加final关键字就是为了防止数据在方法体中被修改。 主要分两种情况:第一,用final修饰基本数据类型;第二,用final修饰引用类型。第一种情况,修饰基本类型(非引用类型): 这时参数的值在方法体内是不能被修改的,即不能被重新赋值。否则编...

Evan's Blog ٩(๑❛ᴗ❛๑)۶ 2464

面试题系列之使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变

使用final关键字修饰一个变量时,是指引用变量不能变,但是引用变量所指向的对象中的内容还是可以改变的。 public class Demo2 { //声明一个final关键字修饰的字符串 public static final StringBuffer sb = new StringBuffer("abc"); public static void main(String[] args) { // TODO Auto-generated method stub //sb指向新的引用对象

江夏、的博客 1468

final修饰类、方法、变量的区别详解

当子类继承父类时,将可以直接访问到父类内部数据,这可能会导致一些安全问题。为了保证一个类不可被继承,可以使用final来修饰类。

qq_68862343的博客 414

Java final修饰符详解

final 用在方法的前面表示方法不可以被重写(子类中如果创建了一个与父类中相同名称、相同返回值类型、相同参数列表的方法,只是方法体中的实现不同,以实现不同于父类的功能,这种方式被称为方法重写,又称为方法覆盖。注意:final 修饰的变量不能被赋值这种说法是错误的,严格的说法是,final 修饰的变量不可被改变,一旦获得了初始值,该 final 变量的值就不能被重新赋值。final 修饰的方法不可被重写,如果出于某些原因,不希望子类重写父类的某个方法,则可以使用 final 修饰该方法。

D0126_的博客 367
上一篇: BigInteger类实例的构造过程——JDK源码解析
下一篇: ==和equals的简单比较
ole_triangle_java
博客等级 码龄10年 82粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值