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

news2024/11/25 6:31:11

使用规范

  • 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.coloradmin.cn/o/994785.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

快速实现抖音上下滑动,你不知道的ViewPager2用法,信息量巨大,建议收藏点赞。老tier~

万能ViewPager2适配器–SmartViewPager2Adapter 特点功能 完全脱离xml,所有效果只需要通过api调用 具体功能:1. 两句代码实现抖音列表效果2. 无感且丝滑,动态从头部或者底部加载数据3. 设置上下加载监听,再达到预加载limit的时…

用python实现基本数据结构【02/4】

*说明 如果需要用到这些知识却没有掌握,则会让人感到沮丧,也可能导致面试被拒。无论是花几天时间“突击”,还是利用零碎的时间持续学习,在数据结构上下点功夫都是值得的。那么Python 中有哪些数据结构呢?列表、字典、集…

STM32初学-外部RTC时钟芯片DS3231

RTC(Real_Time Clock)即实时时钟,它是电子产品中不可或缺的东西。其最直接的作用就是时钟功能。细心的朋友可以发现,当我们的电脑或者手机没联网时,仍然可以正常显示日期与时钟,这就是RTC的功劳。 RTC的运行无需网络连接&#xff…

python创建exe文件

1、搭建环境 pip install pyinstaller 2、准备测试代码 exe_test.py import timeprint("hello") print("hello") print("hello") print("hello")time.sleep(5) 注:添加sleep以便在执行exe文件的时候能看到结果 3、生…

在Windows操作系统上安装PostgreSQL数据库

在Windows操作系统上安装PostgreSQL数据库 一、在Windows操作系统上安装PostgreSQL数据库 一、在Windows操作系统上安装PostgreSQL数据库 点击 PostgreSQL可跳转至PostGreSQL的官方下载地址。 (1) (2)选择安装的目录&#xff…

入门人工智能 —— 使用 Python 进行文件读写,并完成日志记录功能(4)

入门人工智能 —— 使用 Python 进行文件读写(4) 入门人工智能 —— 使用 Python 进行文件读写打开文件读取文件内容读取整个文件逐行读取文件内容读取所有行并存储为列表 写入文件内容关闭文件 日志记录功能核心代码:完整代码:运…

小工具——筛选图像小工具

最近在公司手动筛图片,需要将某些含有检测目标的图像手动筛选出来用于做新模型的测试。我最开始是两个文件夹,来回复制粘贴,后来感觉这种效率太低了,就随手写了一个图像筛查小工具。代码如下: import sys from PyQt5.…

图论-图的深度优先遍历-Java

回顾力扣144/94//145/102/589/590/429,熟练掌握递归和非递归写法。 图论不强调非递归。 使用邻接表 1个连通分量 Graph.java package Chapt02_DFS; import java.io.File; import java.io.IOException; import java.util.TreeSet; import java.util.Scanner;///…

66.C++多态与虚函数

目录 1.什么是多态 2.多态的分类 3.对象转型 3.1 向上转型: 3.2 向下转型: 4.虚函数 1.什么是多态 生活中的多态,是指的客观的事物在人脑中的主观体现。例如,在路上看到⼀只哈士奇,你可以看做是哈士奇&#xf…

Unity实战(10):如何将某个相机的画面做成贴图(RenderTexture)

目录 前言 一、创建物体、材质与相机 二、将RenderTexture赋给材质 2.1 修改rt1的一些属性 2.2 将rtMat1材质的shader改为Unlit/Texture,并将rt1赋给这个材质 三、效果呈现 前言 本文记录如何将某个相机的画面做成贴图,即游戏某些场景中小地图做法…

时序预测 | MATLAB实现ICEEMDAN-iMPA-BiLSTM时间序列预测

时序预测 | MATLAB实现ICEEMDAN-iMPA-BiLSTM时间序列预测 目录 时序预测 | MATLAB实现ICEEMDAN-iMPA-BiLSTM时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 ICEEMDAN-iMPA-BiLSTM功率/风速预测 基于改进的自适应经验模态分解改进海洋捕食者算法双向长短期记忆…

基于SSM的农产品推广应用网站

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用Vue技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

华为云云耀云服务器L实例评测|centos系统搭建git私服

搭建git私服 前言一、云服务器二、服务器安装git三、服务器git配置1.创建文件用于存放公钥2.设置文件权限3.配置本地公钥 四、服务器部署git仓库四、git仓库到本地总结 前言 之前一直想搭建一个属于自己的git私服,然后没赶上厂商的活动,这次正好赶上华为…

学习笔记——树上哈希

普通子树哈希 树上的很多东西都是转化成链上问题的,比如树上哈希 树上哈希,主要是用于树的同构这个东西上的 什么是树的同构? 如图,不考虑节点编号,三棵树是同构的 将树转化成链,一般有两种方式&#xf…

mongodb安装全过程详解

mongodb安装全过程详解 安装mongodb环境安装mongodb shell 安装mongodb环境 进入mongodb官网下载社区版服务器 点击跳转下载地址 选择适应自己系统的版本,然后下载 下图为下载后的文件,双击进行安装 需要注意的两个点 ①选择完整安装 ②不下载mongo…

C语言——指针进阶(二)

目录 七.函数指针数组 八.指向函数指针数组的指针 九.回调函数 结尾 七.函数指针数组 说白了函数指针数组就是函数指针名字后面添加[ ],二者结合成为数组。 那么这个函数指针数组到底有什么用呢?先不用着急,下面用一个计算器功能代码为大…

【Linux】——网络基础:http协议

目录 前言 应用层 认识协议 协议的概念 传输结构化数据 序列化和反序列化 网络版本计算器 服务器端Server 客户端Client 协议定制 其它 运行效果 HTTP协议 HTTP的简介 认识URL urlencode和urldecode HTTP协议格式 HTTP请求 HTTP响应 HTTP的方法 GET和POST…

时序分解 | MATLAB实现基于LMD局部均值分解的信号分解分量可视化

时序分解 | MATLAB实现基于LMD局部均值分解的信号分解分量可视化 目录 时序分解 | MATLAB实现基于LMD局部均值分解的信号分解分量可视化效果一览基本介绍程序设计参考资料 效果一览 基本介绍 LMD局部均值分解 直接替换Excel即可运行包含频谱图相关系数图 Matlab语言 1.算法新颖…

UMA 2 - Unity Multipurpose Avatar☀️七.UMA API介绍

文章目录 🟥 UMA Data DNA参数引用位置🟥 UMA API介绍🟥 UMA Data DNA参数引用位置 我们想通过代码去控制如图所示参数,达到捏脸的目的.下面就是可以控制的代码: _dna["headSize"].Set(1); _avatar.BuildCharacter();我们观察发现操控代码类似Material去设置…

01_瑞萨GUI(LVGL)移植实战教程之软件和硬件准备

本系列教程配套出有视频教程,观看地址:https://www.bilibili.com/video/BV1gV4y1e7Sg 1. 软件和硬件准备 1.1 本节要点 本节学习如何搭建开发环境,硬件接线,为我们后续的学习做好基础必要的准备。 1.2资料准备 本文档所有用到…