int,Integer,String,StringBuild,StringBuffer之谜

智能驾驶智慧交通行业智算中心(AIDC)建设规划方案.pptx 立即下载

1. int与 Integer:

突然发现自己对Integer i = 10;这种语法不太明白,于是乎有了这篇文章,那么在讲解 Integer 之前,我们先看下面这段代码:  
public static void main(String[] args) {
    Integer i = 10;
    Integer j = 10;
    System.out.println(i == j);
      
    Integer a = 128;
    Integer b = 128;
    System.out.println(a == b);
     
    int k = 10;
    System.out.println(k == i);
    int kk = 128;
    System.out.println(kk == a);
      
    Integer m = new Integer(10);
    Integer n = new Integer(10);
    System.out.println(m == n);
}

大家可以先思考一下结果是什么?

答案是:

true,false,true,true,false

至于为什么是这个结果,下面我们来一一介绍。
1、Integer 类简介

首先我们大致看一下Integer是什么,Integer 类在JDK1.0的时候就有了,它是一个类,是 int 基本数据类型的封装类。
2、Integer 类和 int 的区别

①、Integer 是 int 包装类,int 是八大基本数据类型之一(byte,char,short,int,long,float,double,boolean)

②、Integer 是类,默认值为null,int是基本数据类型,默认值为0;

③、Integer 表示的是对象,用一个引用指向这个对象,而int是基本数据类型,直接存储数值。
3、Integer 的自动拆箱和装箱

自动拆箱和自动装箱是 JDK1.5 以后才有的功能,也就是java当中众多的语法糖之一,它的执行是在编译期,会根据代码的语法,在生成class文件的时候,决定是否进行拆箱和装箱动作。
①、自动装箱

一般我们创建一个类的时候是通过new关键字,比如:
  
Object obj = new Object();

但是对于 Integer 类,我们却可以这样:
Integer a = 128;

为什么可以这样,通过反编译工具,我们可以看到,生成的class文件是:
Integer a = Integer.valueOf(128);

这就是基本数据类型的自动装箱,128是基本数据类型,然后被解析成Integer类。
②、自动拆箱

我们将 Integer 类表示的数据赋值给基本数据类型int,就执行了自动拆箱。
Integer a = new Integer(128);
int m = a;

反编译生成的class文件:
    
Integer a = new Integer(128);
int m = a.intValue();

简单来讲:自动装箱就是Integer.valueOf(int i);自动拆箱就是 i.intValue();
4、回顾开头的问题
public static void main(String[] args) {
    Integer i = 10;
    Integer j = 10;
    System.out.println(i == j);
      
    Integer a = 128;
    Integer b = 128;
    System.out.println(a == b);
     
    int k = 10;
    System.out.println(k == i);
    int kk = 128;
    System.out.println(kk == a);
      
    Integer m = new Integer(10);
    Integer n = new Integer(10);
    System.out.println(m == n);
}

我们使用反编译工具Jad,得到的代码如下:
public static void main(String args[])
{
    Integer i = Integer.valueOf(10);
    Integer j = Integer.valueOf(10);
    System.out.println(i == j);
    Integer a = Integer.valueOf(128);
    Integer b = Integer.valueOf(128);
    System.out.println(a == b);
    int k = 10;
    System.out.println(k == i.intValue());
    int kk = 128;
    System.out.println(kk == a.intValue());
    Integer m = new Integer(10);
    Integer n = new Integer(10);
    System.out.println(m == n);
}

打印结果为:true,false,true,true,false

首先,直接声明Integer i = 10,会自动装箱变为Integer i = Integer.valueOf(10);Integer i 会自动拆箱为 i.intValue()。

①、第一个打印结果为 true

对于 i == j ,我们知道这是两个Integer类,他们比较应该是用equals,这里用==比较的是地址,那么结果肯定为false,但是实际上结果为true,这是为什么?

我们进入到Integer 类的valueOf()方法:

分析源码我们可以知道在 i >= -128 并且 i <= 127 的时候,第一次声明会将 i 的值放入缓存中,第二次直接取缓存里面的数据,而不是重新创建一个Ingeter 对象。那么第一个打印结果因为 i = 10 在缓存表示范围内,所以为 true。

②、第二个打印结果为 false

从上面的分析我们知道,128是不在-128到127之间的,所以第一次创建对象的时候没有缓存,第二次创建了一个新的Integer对象。故打印结果为false

③、第三个打印结果为 true

Integer 的自动拆箱功能,也就是比较两个基本数据类型,结果当然为true

④、第四个打印结果为 true

解释和第三个一样。int和integer(无论new否)比,都为true,因为会把Integer自动拆箱为int再去比较。

⑤、第五个打印结果为 false

因为这个虽然值为10,但是我们都是通过 new 关键字来创建的两个对象,是不存在缓存的概念的。两个用new关键字创建的对象用 == 进行比较,结果当然为 false。
5、测试
Integer a = 1;
Integer b = 2;
Integer c = 3;
Integer d = 3;
 
Integer e = 321;
Integer f = 321;
 
Long g = 3L;
Long h = 2L;
 
System.out.println(c == d);
System.out.println(e == f);
System.out.println(c == (a + b));
System.out.println(c.equals((a+b)));
System.out.println(g == (a+b));
System.out.println(g.equals(a+b));
System.out.println(g.equals(a+h));

反编译结果:

 

打印结果为:
  
true
false
true
true
true
false
true

分析:第一个和第二个结果没什么疑问,Integer类在-128到127的缓存问题;

第三个由于  a+b包含了算术运算,因此会触发自动拆箱过程(会调用intValue方法),==比较符又将左边的自动拆箱,因此它们比较的是数值是否相等。

第四个对于c.equals(a+b)会先触发自动拆箱过程,再触发自动装箱过程,也就是说a+b,会先各自调用intValue方法,得到了加法运算后的数值之后,便调用Integer.valueOf方法,再进行equals比较。

第五个对于 g == (a+b),首先计算 a+b,也是先调用各自的intValue方法,得到数值之后,由于前面的g是Long类型的,也会自动拆箱为long,==运算符能将隐含的将小范围的数据类型转换为大范围的数据类型,也就是int会被转换成long类型,两个long类型的数值进行比较。

第六个对于 g.equals(a+b),同理a+b会先自动拆箱,然后将结果自动装箱,需要说明的是 equals 运算符不会进行类型转换。所以是Long.equals(Integer),结果当然是false

第七个对于g.equals(a+h),运算符+会进行类型转换,a+h各自拆箱之后是int+long,结果是long,然后long进行自动装箱为Long,两个Long进行equals判断。

2. String,StringBuild,StringBuffer:

2.1 区别:

      String是可变的, String使用字符数组保存字符串,该字符数组用final修饰了,是不可变的

      StringBuffer 和StringBuild 是可变的,而StringBuffer 是线程安全的,使用了synchronized同步锁,StringBuild是非线程安全的,一般情况下,如果单线程,字符串经常进行连接操作,可使用StringBuild的效率更高。

2.2:Java中以下两句有什么区别呢?
         String str1="abc";  
         String str2=new String("abc");

String s = new String("xxx")在检查常量池的时候会涉及到堆中创建对象;String s = "x"直接检查常量池,不会涉及堆。

String s1 = new String("1"); 是在堆中创建一个String对象,并检查常量池中是否有字面量为"1"的常量,没有的话在常量区创建"1"并将堆中的对象指向该常量,有的话堆中的对象直接指向"1";

String s2 = new String("1"); 又在堆中创建一个String对象,并将s2指向该对象,其字面量"1"在前面已经创建,所以不会再创建常量区中创建字符串;

String s3 = "1";   检查常量池中有没有字面量为"1"的字符串,如果没有则创建并将s3指向该常量;有的话直接指向该该常量;

String s4 = "1"  的时候常量池已经有1,所以不会再创建对象,也就是s3与s4指向同一个对象。

 

总结:

1. 整形:装箱时valueOf注意IntegerCash缓存: i >= -128 并且 i <= 127

2.字符串:“abc”是存放在常量池中的,常量池在JVM中属于方法区,方法区和栈是两个概念。即常量池,堆内存,虚拟机栈三个是分开的。另外,new String("abc")时,JVM也首先回去常量池中查看是否有“abc”这个常量字符串,如果没有,也会创建这个常量字符串,然后在堆中为String对象分配空间。除此之外,堆内存的String对象中保存的也是“abc”在常量池中的地址引用,而不是“abc”

【专利信息处理】基于Java+Vue的专利文本主题标引与新颖性检索系统设计 项目介绍 基于java+vue的专利文本主题标引与新颖性检索系统设计与实现(含模型描述及部分示例代码) 构建可演进的专利知识服务平台,为后续接入大模型、知识图谱等高级功能奠定基础。; 阅读建议:此资源以实际项目为导向,包含模型设计与部分核心代码示例(如文本清洗、术语归一化、TF-IDF、TextRank、BM25、余弦相似度等),建议读者结合代码理解算法逻辑,并尝试在本地环境中搭建原型系统进行调试内容概要:与扩展,深入本文介绍了一个掌握专利信息处理的技术基于Java与Vue的链路与业务专利文本主题标边界。引与新颖性检索系统的设计与实现。系统通过整合自然语言处理、信息检索与排序融合技术,实现了对海量专利文本的自动化处理,涵盖数据采集、文本清洗、主题提取、技术标签生成、相似专利检索及新颖性辅助分析等功能。核心技术包括字段分层处理、中文分词优化、领域术语归一化、TF-IDF与TextRank关键词提取、BM25与余弦相似度排序、以及权利要求特征覆盖度计算等。系统采用Spring Boot构建后端服务,结合Elasticsearch实现高效全文检索,Redis缓存热点数据,Vue构建可视化前端界面,支持多维度筛选与结果展示。项目强调“辅助而非替代”专业判断,通过闭环反馈机制持续优化术语库与模型效果,致力于将专利文献转化为可计算、可检索、可解释的技术知识资产。; 适合人群:具备Java和Vue开发基础,熟悉Spring Boot、Elasticsearch、MyBatis Plus等技术栈,从事知识产权信息化、NLP应用开发或科技情报系统研发的工程师与研究人员,尤其适合1-5年工作经验的技术人员;; 使用场景及目标:①用于企业研发立项前的技术查新与专利风险排查;②支持知识产权服务机构开展专利布局分析与无效检索;③辅助高校与科研机构进行技术趋势识别与竞争对手监测;④构建可演进的专利知识服务平台,集成大语言模型与知识图谱实现智能升级; 阅读建议:此资源包含完整模型架构与核心代码示例,建议结合实际项目实践,重点理解文本预处理流程、多阶段检索策略与新颖性辅助判断逻辑,并可根据行业需求扩展术语库与算法模块。 立即下载

相关推荐

douyin-favorite-MyLike-2.0.3.zip

douyin-favorite-MyLike-2.0.3.zip

Integer 线程安全的

Integer为什么是线程安全的。 1.Integer只有构造方法对于value值进行设置,而且value都是finnal 是不可改变的常量,其他的都是get 。

史上最强的弟子 2575

英文打字练习 可自定义练习范围

英文打字练习 可自定义练习范围 给初学者熟悉键位用

常用类练习

类练习题

lpp_616的博客 507

非凸非光滑优化的惯性块镜像下降方法(Matlab代码实现)

内容概要:本文详细介绍了“非凸非光滑优化的惯性块镜像下降方法”的Matlab代码实现,重点针对三相PWM控制等复杂工程场景中的非凸非光滑优化问题,提出一种高效的迭代求解算法。文章系统阐述了该方法的数学建模原理、收敛性分析及优化机制,并提供了完整的Matlab仿真代码与多个典型应用实例(如储能系统管理、电力电子控制等),帮助读者深入理解算法在实际科研与工程中的部署方式。内容兼具理论深度与实践价值,突出展示了该方法在电力系统、信号处理和数据融合等领域的广泛应用潜力。; 适合人群:具备扎实的数学优化理论基础和良好Matlab编程能力,从事控制工程、电力电子、信号处理或运筹优化等相关方向的研究生、科研人员及工程师(建议具有1-3年以上相关经验);特别适合致力于非凸优化、智能算法设计及工业级仿真验证的技术人员。; 使用场景及目标:① 掌握非凸非光滑优化问题的先进求解策略,提升对复杂目标函数与约束条件的处理能力;② 利用所提供的Matlab代码快速实现惯性块镜像下降算法,应用于电力系统优化控制、路径规划、信号恢复等科研项目中;③ 借助文中的仿真案例进行算法性能测试、参数调优与二次开发,推动高水平论文撰写与技术创新。; 阅读建议:此资源以算法实现为核心,建议读者结合理论推导与代码实践同步学习,优先按照文档推荐目录顺序逐步深入,确保掌握前置知识体系;同时关注公众号“荔枝科研社”获取完整资源包、配套资料及更新内容,全面提升学习完整性与科研应用效能。

【多无人机追捕-逃逸】平面中多追捕者保证实现的分散式追捕-逃逸策略研究(Matlab代码实现)

内容概要:本文针对平面中多无人机追捕者与逃逸者之间的博弈问题,提出了一种保证实现的分散式追捕策略。该策略基于相对几何关系与速度信息,实现了多追捕者在无中央协调机制下的自主决策与协同围捕,确保对逃逸者的有效捕获。研究内容涵盖追捕-逃逸系统的数学建模、分散式控制律的设计、收敛性理论证明,并通过Matlab仿真验证了算法在多种场景下的有效性、鲁棒性与可扩展性,展示了追捕者如何动态调整轨迹以逐步缩小包围圈并最终完成捕获。; 适合人群:具备控制理论、机器人学、自动化或计算机科学背景,熟悉Matlab编程,从事多智能体系统、无人机协同控制、博弈论或自主系统研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于多无人机系统在安防监控、目标围捕、应急响应等任务中的协同路径规划与自主决策;②为多智能体协同控制、分布式算法设计与博弈策略研究提供理论支撑与可复现的代码实例,支持进一步拓展至三维空间、多逃逸者或异构无人机场景。; 阅读建议:建议读者结合Matlab代码深入理解控制律的设计原理与实现细节,重点关注系统的建模过程、稳定性分析与仿真结果的动态演化,可在此基础上开展算法改进与跨场景迁移研究。

java面向对象第七天(--StringBuffer--StringBulider -- 权限修饰符:本类和不同包下子类的关系--)

1.如何判断一个字符串是否对称private static void fun(){ String str = "asddsa"; //字符串转化成数组; char[] array = new String(array); for (int i = 0; i&lt;array.length;i++){ if(array[i]!=array[array.len...

博客 353

(Multisim课设资料)最全面函数信号发生器(三角波+正弦波+方波信号+锯齿波仿真设计+报告文档

内容概要:本文详细介绍了基于Multisim平台设计的多功能函数信号发生器,能够稳定产生三角波、正弦波、方波和锯齿波四种常用信号,涵盖完整的电路设计、仿真验证与调试过程,并配套完整的课程设计报告。资料系统阐述了各波形的生成原理与电路结构,包括运算放大器的应用、RC振荡电路设计、积分与比较电路实现等关键技术,帮助使用者深入理解信号发生器的工作机制。资源包含Multisim仿真文件、设计原理图、波形分析图表及撰写规范的课设文档,便于直接学习与修改应用; 适合人群:具备电路分析、模拟电子技术等基础知识的电子信息类、自动化类及相关专业的本科学生,适用于课程设计、实验实践或毕业设计阶段的学习者,以及指导相关实践课程的高校教师; 使用场景及目标:①作为模拟电子技术课程设计的参考模板,完成函数信号发生器的设计与仿真任务;②掌握Multisim软件在电路仿真中的实际应用,提升电路设计与调试能力;③理解多波形信号发生器的实现原理,巩固运放电路、振荡电路等核心知识点;④高效完成课程设计报告撰写,提升综合实践与工程表达能力; 其他说明:所有资料可通过提供的网盘链接完整下载,内容结构完整、逻辑清晰,具有较强的实用性和可复用性,适合作为课程设计的标准参考范例。

常用类的练习

1、 toString()练习----被大多数类复写了(查API看一下) 分别定义Double、Integer、String、StringBuffer类的对象,并进行赋值(随意一个值),调用对象中的toString()方法将其转换为字符串类型并打印。 package lei;   public class toString1 { public static void main(Strin

liufei_jie的博客 642

Ollama内网离线部署大模型实战:从模型文件到私有化服务

本文详细介绍了如何在内网离线环境下,利用Ollama部署私有化大模型服务。内容涵盖从获取GGUF格式模型文件、手动安装Ollama、编写核心Modelfile配置文件,到创建运行模型、性能调优及安全加固的全流程实战指南,旨在帮助企业安全、可控地构建内部AI能力。

weixin_29209805的博客 213

奇异值分解(SVD)C++实现

奇异值分解SVD(紧奇异值分解,截断奇异值分解)C++实现

weixin_45804601的博客 4172

Integer127==127结果为true为什么Integer128==128结果为false?

先看代码: public class Main { public static void main(String[] args) { Integer a1 = 127; Integer a2 = 127; System.out.println("a1 == a2:::::"+(a1 == a2)); Integer b1 = 128; Integer b2 = 128; System.out.pri

x瓜皮的博客 1583

手把手教你用SIMCOM A7670C_FASL模组实现双路MQTT连接阿里云(附完整源码)

本文详细介绍了如何使用SIMCOM A7670C_FASL 4G模组实现双路MQTT连接阿里云,包括硬件配置、开发环境搭建、双路MQTT架构设计及实现细节。通过完整的源码示例和实战指南,帮助开发者快速掌握物联网设备开发中的多路MQTT连接技术,提升工业级应用的开发效率。

weixin_33696822的博客 226

String StringBuffer和 StringBuild

String 对象,以及方法。 StringBuffer StringBuilder StringBuffer: 字符串缓冲类:程安全的可变字符序列。一个类似于 String 的字符串缓冲区 StringBuilder: 一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步.线程不安全。 String 和 StringBuffer Strin...

wai___wai的博客 158

从零做出可发布的2D冒险游戏!Unity全流程实战指南:从资源搭建到打包发布,新手也能跟着做

项目配置→资源导入→核心模块开发→关卡设计→调试→打包发布;玩家控制→敌人AI→道具系统→UI系统→游戏管理器→音效系统;新手开发重点:先实现核心玩法(移动、跳跃、攻击),再补充UI、音效、存档等辅助功能;调试是关键:每实现一个功能就测试,避免最后一堆bug难以定位。从零做一款完整的2D冒险游戏,能快速提升你的Unity综合能力——不仅能掌握C#编程、2D物理、UI系统,还能理解游戏开发的完整流程。先做出基础版,再慢慢迭代优化,你会发现游戏开发并没有想象中那么难。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1172

BOE CHPI协议解析:高速显示驱动的核心技术

本文深入解析了BOE CHPI协议,这是一种为高分辨率、高刷新率显示面板设计的时钟嵌入式高速点对点接口技术。文章详细阐述了其三层架构(物理层、链路层、协议层)、核心机制(如链路训练与BCC通道)以及如何通过高速串行差分传输解决大尺寸屏幕内部数据传输的带宽与干扰难题,是驱动8K、窄边框等高端显示应用的关键核心技术。

m9n0o的博客 543

Integer 127细节

public class Zhenze { // 待匹配字符串 public static void main(String[] args) { Integer a = 127; Integer b= 127; Integer c = 128; Integer d = 128; System.out.println(a==b); // true System.out.println(c==d)

拱卒的博客 693

微信小程序 - 解决报错 operateAudio:fail audioInstance is not set(wx.getRecorderManager苹果ios真机调试运行,播放音频播放出错解决)

微信小程序,苹果ios系统,真机测试报错,播放音频报错operateAudio:fail audioInstance not exist,errCode: -1,小程序生成音频播放报错errMsg,真机调试报错开发者工具没问题,wx.getRecorderManager,音频实例,InnerAudioContext,各种方法都试了不行,只有ios苹果手机有这个问题,IOS 出现 operateAudio,在iOS无法播放的解决方案,更新到最新版本了还是不行,链接没有特殊字符,微信小程序全局音频设置,手机上播

🏆 前端领域优质创作者 1万+

谈谈Integer和String

1.Integer Integer是int的包装类,为什么要提供包装类呢?是为了各种类型之间的转换,先看一下Integer的源码 public final class Integer extends Number implements Comparable<Integer> { /** * A constant holding the minimum value...

weixin_42048560的博客 966

【银河麒麟V10】【桌面】【服务器】系统启动问题

1、如果之前运行好好的,重启后系统报错,一般80%是因为fstab的问题,回想下之前有没有添加过外接存储,修改过/etc/fstab,如果是的话一般是因为存储异常(比如网络存储无法连接,本地存储路径变化)导致系统开机自检失败,导致无法正常启动; 处理方式:进入单用户(单用户进入的几种方式上面有专门文章介绍),修改/etc/fstab,将新增的内容暂时注释掉,然后重启系统,能正常进入系统后再分析失败原因。 ...

桂安俊@KylinOS 3万+

prplOS适配USB LAN网卡

本文介绍了将USB LAN网卡(如rndis0)适配到prplOS的LAN管理流程。

四儿家的小祖宗的博客 321

面试题 -关于Integer(-128~127范围内)的交换

ー:题目如下public class IntegerSwapTest {    public static void main(String[] args) {        Integer a = 1;        Integer b = 2;        System.out.println("before swap: a=" + a + ",b=" + b);              ...

忧郁的香菇 1868

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

java中int和integer,String,StringBuffer,StringBuilder的区别

java中int和integer区别 int 是基本类型,直接存数值 integer是对象,用一个引用指向这个对象 Java中int和Integer关系是比较微妙的。关系如下:   1.int是基本的数据类型;   2.Integer是int的封装类;   3.int和Integer都可以表示某一个数值;   4.int和Integer不能够互用,

筱进GG 954

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

JAVA基础之StringBuffer类与数组常见操作

1. StringBuffer概念与构造方法 1.1 概念 如果我们要对字符串进行拼接操作,每次拼接都会重新构建一个String对象,会浪费我们很多时间且这样还会浪费空间。 而StringBuffer则解决了这个问题,它包含多个字符的字符串数据,对象是可以扩充和修改的。 1.1.1 StringBuffer与String的区别 String的特点是一旦赋值,便不能更改其指向的字符对象,如...

weixin_42478671的博客 1309

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Java常用类练习3

1.分别定义Double、Integer、String、StringBuffer类的对象,并进行赋值(随意一个值),调用对象中的toString()方法将其转换为字符串类型并打印。 public class toStringDemo { public static void main(String[] args) { toStringDemo tsd = new toSt

CassielWQQ的博客 492

String int Integer之间互相转换

直接上图:

张铎 760
上一篇: docker 搭建私服nexus 时无法拉取镜像
下一篇: eclipse与intellij idea中的classpath分析
雨冰
博客等级 码龄15年 18粉丝 60原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值