基本数据类型和包装类型 使用规范

使用规范

  • 1 概念
    • 1.1 基本数据类型
    • 1.2 包装类型
    • 1.3 对应关系
    • 1.4 自动装箱/拆箱
  • 2 变量类型
    • 2.1 全局变量
      • 2.1.1 常量(Constants)
      • 2.1.2 类变量(Class Variables)
      • 2.1.3 实例变量(Instance Variables)
    • 2.2 局部变量(Local Variables)
  • 2 使用规范
    • 2.1 POJO必须使用包装类型
    • 2.2 RPC 方法的返回值和参数使用包装数据类型
    • 2.3 局部变量推荐使用基本数据类型

1 概念

1.1 基本数据类型

在这里插入图片描述

整数类型:byte1字节,8位,最大存储数据量是255,存放的数据范围是-128~127之间。整数类型:short2字节,16位,最大数据存储量是65536,数据范围是-32768~32767之间。整数类型:int4字节,32位,最大数据存储容量是232次方减1,数据范围是负的231次方到正的231次方减1。整数类型:long8字节,64位,最大数据存储容量是264次方减1,数据范围为负的263次方到正的263次方减1。浮点类型:float4字节,32位,数据范围在3.4e-45~1.4e38,直接赋值时必须在数字后加上f或F。浮点类型:double8字节,64位,数据范围在4.9e-324~1.8e308,赋值时可以加d或D也可以不加。字符型:char2字节,16位,存储Unicode码,用单引号赋值。布尔型:boolean1字节,8,只有truefalse两个取值

1.2 包装类型

在这里插入图片描述

1.3 对应关系

在这里插入图片描述

1.4 自动装箱/拆箱

自动装箱(Autoboxing)和拆箱(Unboxing)是Java中用于在基本数据类型和其对应的包装类型之间进行转换的机制。这两种机制的目的是使代码更简洁和易读,同时提供类型安全性。

1、自动装箱:将基本数据类型的值自动封装成相应的包装类型对象。例如,将 int 转换为 Integer,将 double 转换为 Double,等等。这样做可以让你像操作对象一样操作基本数据类型。

Integer num = 42; // 自动装箱,将基本类型 int 转换为 Integer 对象

2、自动拆箱:将包装类型对象自动解封为基本数据类型的值。例如,将 Integer 转换为 int,将 Double 转换为 double,等等。这样做可以让你像操作基本数据类型一样操作包装类型对象。

int value = num; // 拆箱,将 Integer 对象转换为基本类型 int

如果包装类型对象为 null,会导致 NullPointerException 异常。

2 变量类型

2.1 全局变量

全局变量,又称为成员变量。可分为两种。

2.1.1 常量(Constants)

常量是一种特殊类型的变量,它们使用 final 关键字声明,表示它们的值在编译时就已经确定,不能被修改。通常使用大写字母表示,例如 PI。

在 Java 中,常量的内存位置可以根据常量的类型和声明方式而有所不同。常量主要分为以下几种类型:

1、字面常量(Literal Constants): 这些常量是编译时已知的固定值,它们直接包含在代码中,不占用额外的内存位置。例如,以下是一些字面常量的示例:

整数常量:如 42-10。
浮点数常量:如 3.140.01。
字符常量:如 'A''1'。
字符串常量:如 "Hello""Java"。
布尔常量:truefalse

2、final 关键字声明的常量: 使用 final 关键字声明的常量会在编译时被初始化,并在运行时分配内存位置。这些常量通常被编译器优化,以便在运行时能够快速访问。例如:

final int MY_CONSTANT = 100;

3、枚举常量(Enum Constants): 枚举常量是在枚举类型中定义的,它们也在运行时分配内存位置。每个枚举常量都是该枚举类型的一个实例,因此它们具有自己的内存位置。例如:

enum Days { MONDAY, TUESDAY, WEDNESDAY }

4、静态 final 常量: 静态 final 常量通常用于类级别,它们在类加载时分配内存位置,可以通过类名直接访问。这些常量通常也会被编译器优化。例如:

public class Constants {public static final int MAX_VALUE = 100;
}

2.1.2 类变量(Class Variables)

这些变量属于类而不是对象,它们被所有该类的对象共享。类变量通常用 static 关键字声明,它们在类加载时初始化,并且在整个应用程序的生命周期内存在。

public class Person {public static String common = "人类";
}class Client {public static void main(String[] args) {//sout: 人类System.out.println(Person.common);}
}

2.1.3 实例变量(Instance Variables)

又称为属性。这些变量属于对象的一部分,每个对象都有自己的一组实例变量。它们在对象创建时分配内存,并随着对象的生命周期而存在。实例变量在类的任何非静态方法中都可以访问。

public class MyClass {// 实例变量private String name;private int age;// 构造方法public MyClass(String name, int age) {this.name = name;this.age = age;}// 实例方法,访问实例变量public void displayInfo() {System.out.println("Name: " + name);System.out.println("Age: " + age);}public static void main(String[] args) {// 创建对象并访问实例变量MyClass obj1 = new MyClass("Alice", 25);MyClass obj2 = new MyClass("Bob", 30);obj1.displayInfo(); // 输出 obj1 的实例变量值obj2.displayInfo(); // 输出 obj2 的实例变量值}
}

2.2 局部变量(Local Variables)

局部变量声明在方法构造函数代码块内部,它们只在这些区域内有效,通常需要在使用之前显式初始化。局部变量的生命周期仅限于其所在的代码块。

public class LocalVariablesExample {public void calculateSum(int a, int b) {// 声明局部变量int sum;// 计算和并赋值给局部变量sum = a + b;// 输出结果System.out.println("Sum: " + sum);}public static void main(String[] args) {LocalVariablesExample example = new LocalVariablesExample();example.calculateSum(5, 7); // 调用方法}
}

2 使用规范

在这里插入图片描述

2.1 POJO必须使用包装类型

基本类型的属性有默认值,如int型是0。
包装类型的属性没有默认值,都是null。

包装数据类型允许属性具有一个额外的状态,即 null。这对于表示属性未初始化或无效的情况非常有用。如果使用基本数据类型,无法区分一个属性是未初始化还是具有特定的有效值。

假设你有一个表示人员money的 POJO 类:

public class Person {private Integer money;// 构造函数、getter 和 setter 方法等
}

使用包装数据类型 Integer 来表示money允许你更清晰地表示属性的状态,例如:

Person person = new Person();// 表示年龄未初始化
Integer money= person.getMoney();
if (money== null) {System.out.println("moeny未初始化");
} else {System.out.println("money为:" + money);
}

使用包装数据类型,你可以明确地表示属性是否已初始化。如果你使用基本数据类型 int 代替 Integer,那么在money未初始化的情况下,你将无法区分是未初始化还是具有某个有效值(例如,0)。这可能导致误解和 bug 的产生。

2.2 RPC 方法的返回值和参数使用包装数据类型

与 POJO 类属性类似,RPC 方法的返回值和参数也应该使用包装数据类型,以便能够明确地表示返回的结果或传递的参数是否存在、是否有效。

比如RPC调用中入参和回参有值是null,就可以知道是没有传输或传输错误。如果是基本数据类型,给你一个0,你知道是想给你0,还是没有传输,默认值是0。如果傻乎乎地存到了数据库0,在一些场景下会出问题的。

2.3 局部变量推荐使用基本数据类型

这里个人感觉还是看场景。
1、如果需要局部变量的状态有null的情况,就使用包装类型,如

//从数据库里查money,如果用户还没有存钱,money=null,如果存了50,又取了50,money=0
int money = orderDao.get(orderId);

这个时候取钱,会报NPE。
2、不需要null状态,并且大量计算。

Integer a=10;
a+=20;

先将10自动装箱,然后拆箱,+20后又装箱。如果设计大量这样的操作,还是比较耗时的,这个时候建议使用基本数据类型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/127296.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ShopXO商城系统文件上传0Day代审历程

Git仓库: https://github.com/gongfuxiang/shopxo简介: 两天攻防中,某政局内网横向发现多网段服务器,该服务器搭建了ShopXO商城系统(后来发现是开发临时搭建的,准备做二开用的)。结果花了30来秒审了个垃圾Day拿下该服…

百度文心一言GPT免费入口也来了!!!

文心一言入口地址:文心一言能力全面开放 文心一言是百度全新一代知识增强大语言模型,文心大模型家族的新成员,能够与人对话互动,回答问题,协助创作,高效便捷地帮助人们获取信息、知识和灵感。 文心一言的技…

光源控制器光源亮度调节操作说明

光源控制器光源亮度调节操作说明 光源亮度的调节在许多应用中都扮演着至关重要的角色,不仅影响图像质量,还能改善工作环境。下面是关于光源控制器光源亮度调节的详细操作步骤,帮助您轻松实现亮度的合适调整。 步骤一:登录系统 …

【C++】常用拷贝和替换算法

0.前言 1.copy #include <iostream> using namespace std;// 常用拷贝算法 copy #include<vector> #include<algorithm>void myPrint(int val) {cout << val << " "; }void test01() {vector<int>v;for (int i 0; i < 10; i…

企业架构LNMP学习笔记32

企业架构LB-服务器的负载均衡之LVS实现&#xff1a; 学习目标和内容 1&#xff09;能够了解LVS的工作方式&#xff1b; 2&#xff09;能够安装和配置LVS负载均衡&#xff1b; 3&#xff09;能够了解LVS-NAT的配置方式&#xff1b; 4&#xff09;能够了解LVS-DR的配置方式&…

层次分析法(matlab实现)

1.层次分析法&#xff08;AHP&#xff09; 在决策理论中&#xff0c;层次分析法是一种以数学和心理学为基础&#xff0c;组织和分析复杂决策的结构化技术&#xff0c;它代表了一种量化决策标准权重的准确方法&#xff0c;通过成对比较&#xff0c;利用个别专家的经验来估计因素…

常用电子元器件基础知识

目录 一、电阻 二、电容 三、电感 四、保险丝 五、二极管 一、电阻 概念&#xff1a;顾名思义&#xff0c;就是增加电流通过的阻力的。 就像是在水渠中放入东西&#xff0c;能阻止水的顺利通过也是一个道理。 基于电阻的电气特性&#xff0c;电阻在电路中主要有以下四个…

算法训练营day46|动态规划 part08:完全背包 (LeetCode 139. 单词拆分、多重背包理论基础)

文章目录 139. 单词拆分 (求排列方法)回溯思路分析背包思路分析代码实现思考总结 多重背包理论基础 139. 单词拆分 (求排列方法) 题目链接&#x1f525;&#x1f525; 给定一个非空字符串 s 和一个包含非空单词的列表 wordDict&#xff0c;判定 s 是否可以被空格拆分为一个或多…

TorchDynamo初探②:Torch.FX调研和实践

作者&#xff5c;strint 1 概要 torch.fx 是 PyTorch 官方发布的 Python 到 Python 的代码变换工具。如果你想做 Torch 代码变换&#xff0c;torch.fx 是首选工具。 torch.fx 会将 Torch 代码 trace 成 6 种基础的 node 组成的 graph&#xff0c;基于这个 graph 可以方便的做各…

动态库的制作与使用及 动态库加载失败解决

加载动态库时有时会出现error while loading shared libraries&#xff1a;libcalc.so:可以通过lld命令查看动态库的依赖关系&#xff0c;发现libcalc.so时not found 原因 查找的优先级是DT_RPATH->LD_LIBRARY_PATH->/etc/ld.so.cache->/lib/,/usr/lib 找不到一个优…

RouterOS-配置PPPoEv4v6 Server

1 接口 ether3 出接口 ether4 内网接口 2 出接口 出接口采用PPPoE拨号SLAAC获取前缀&#xff0c;手动配置后缀 2.1 选择出接口interface&#xff0c;配置PPPoE client模式 2.2 配置PPPoE client用户名和密码 2.3 从PPPoE client获取前缀地址池 2.4 给出接口选择前缀并配置…

Hystrix和Sentinel熔断降级设计理念

目录 1 基本介绍2 Hystrix信号量和线程池区别2.1 信号量模式2.2 线程池模式2.3 注意 3 Sentinel介绍 1 基本介绍 Sentinel 和 Hystrix 的原则是一致的: 当检测到调用链路中某个资源出现不稳定的表现&#xff0c;例如请求响应时间长或异常比例升高的时候&#xff0c;则对这个资源…

[Spring] @Configuration注解原理

文章目录 1.Configuration注解介绍1.1 容器注入ConfigurationClassPostProcessor后置处理器1.2 ConfigurationClassPostProcessor介绍 2.ConfigurationClassPostProcessor解析2.1 Parse12.2 Parse22.3 Parse32.4 Parse42.5 Parse5 3.ConfigurationClassParser解析4.Configurati…

Spring系列文章:Spring6集成MyBatis3.5

1、引入依赖 <dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>6.0.2</version></dependency><dependency><groupId>org.mybatis</groupId><artif…

SAP中的新旧事务码

SAP中的新旧事务码 SAP随着新版本的发布&#xff0c;我们知道sap已经更新了很多的程序和TCODE。sap提供了很多新的TCODE来替换旧的TCODE&#xff0c;新TCODE有很多的新特性和新功能。在这个这种情况下&#xff0c;很多旧TCODE就会被废弃。我们如何查找这个替换呢&#xff1f; …

KMP算法

个人理解 我理解的KMP 算法就是记录前缀与后缀&#xff0c;每当遇到不匹配的时候由于后缀已经被匹配过&#xff0c;所以下次应该跳到匹配过的后缀也就是相应的前缀后面在进行匹配。 如何计算前缀 参考卡哥网站 前缀计算 然后利用前缀表去做匹配 leetcode 28 class Solutio…

【Kubernetes理论篇】2023年最新CKA考题+解析

文章目录 第一题&#xff1a;RBAC授权访问控制第二题&#xff1a;Node节点维护第三题&#xff1a;K8S集群版本升级第四题&#xff1a;ETCD数据库备份恢复第五题&#xff1a;NetworkPolicy网络策略第六题&#xff1a;Service四层负载第七题&#xff1a;Ingress七层负载第八题&am…

nodejs采集淘宝、天猫网商品详情数据以及解决_m_h5_tk令牌及sign签名验证(2023-09-09)

一、淘宝、天猫sign加密算法 淘宝、天猫对于h5的访问采用了和APP客户端不同的方式&#xff0c;由于在h5的js代码中保存appsercret具有较高的风险&#xff0c;mtop采用了随机分配令牌的方式&#xff0c;为每个访问端分配一个token&#xff0c;保存在用户的cookie中&#xff0c;通…

OpenCV 11(图像金字塔)

一、 图像金字塔 **图像金字塔**是图像中多尺度表达的一种&#xff0c;最主要用于图像的分割&#xff0c;是一种以多分辨率来解释图像的有效但概念简单的结构。简单来说, 图像金字塔是同一图像不同分辨率的子图集合. 图像金字塔最初用于机器视觉和图像压缩。其通过梯次向下采…

【面试心得】WebBench 整理

在面试九识的时候&#xff0c;被问到了WebBench的原理&#xff0c;当时没答上来&#xff0c;这里做一个整理 WebBench 源码【带注释】&#xff1a;GitHub - YukunJ/annotated-webbench-1.5: bilingually annotated Webbench-1.5 webbench是一个轻量的压测工具&#xff0c;可以…