[Java基础] 基本数据类型

[Java基础] 运算符

​​​​​​​[Java基础] Java HashMap 的数据结构和底层原理

目录

Java基本数据类型

byte

short

int

long

float

double

char

boolean

存在的一些坑

最佳实践

常见面试题

Java有哪些基本数据类型?

各基本数据类型所占的内存空间是多少?

boolean类型在JVM中是如何表示的?

Java中的包装类是什么?

字符型数据char可以存储什么?

浮点型数据float和double的精度问题?

整型数据溢出问题?

基本数据类型之间的转换规则?


Java基本数据类型

byte

长度1个字节(8位),有符号的,以二进制补码表示的整数。取值范围是-128到127。

public class ByteExample {  public static void main(String[] args) {  byte myByte = 10;  System.out.println("myByte的值是:" + myByte);  }  
}

short

长度两个字节(16位),有符号的,以二进制补码表示的整数。取值范围是-32,768到32,767。

public class ShortExample {  public static void main(String[] args) {  short myShort = 200;  System.out.println("myShort的值是:" + myShort);  }  
}

int

长度4个字节(32位),有符号的,以二进制补码表示的整数。取值范围是-2^31 ~2^31 - 1

public class IntExample {  public static void main(String[] args) {  int myInt = 10000;  System.out.println("myInt的值是:" + myInt);  }  
}

long

长度8个字节(64位),有符号的,以二进制补码表示的整数。取值范围是-2^63 ~ 2^63 - 1。当需要表示较大的整数时,可以使用long类型。在声明long类型的变量时,通常需要在数值后面加上L或l后缀。

public class LongExample {  public static void main(String[] args) {  long myLong = 10000000000L;  System.out.println("myLong的值是:" + myLong);  }  
}

float

长度4个字节(32位),单精度浮点数。在声明float类型的变量时,通常需要在数值后面加上F或f后缀。

public class FloatExample {  public static void main(String[] args) {  float myFloat = 3.14f;  System.out.println("myFloat的值是:" + myFloat);  }  
}

double

长度8个字节(64位),双精度浮点数,它比float类型具有更高的精度。

public class DoubleExample {  public static void main(String[] args) {  double myDouble = 3.141592653589793;  System.out.println("myDouble的值是:" + myDouble);  }  
}

char

长度2个字节(16位),Unicode字符。

public class CharExample {  public static void main(String[] args) {  char myChar = 'A';  System.out.println("myChar的值是:" + myChar);  }  
}

boolean

长度1个字节(8位),只有两个可能的值,true和false。它通常用于条件判断或逻辑运算。

public class BooleanExample {  public static void main(String[] args) {  boolean isTrue = true;  System.out.println("isTrue的值是:" + isTrue);  boolean isFalse = false;  System.out.println("isFalse的值是:" + isFalse);  }  
}

存在的一些坑

Java基本数据类型在使用时存在一些潜在的“坑”,这些坑可能会导致程序出错或产生意外的结果。以下是一些常见的Java基本数据类型使用时的注意事项和潜在问题:

  • 整型数据溢出
    • 当整型变量的值超出了其取值范围时,会发生数据溢出。例如,int 类型变量的取值范围是 -2^312^31 - 1,如果尝试存储超出这个范围的值,将会导致数据溢出。
    • 对于 long 类型,虽然其取值范围更大,但在进行大数运算时仍需注意溢出问题。
  • 浮点型数据精度丢失
    • 浮点型数据(floatdouble)在表示和运算时可能会丢失精度。这是因为浮点型数据采用IEEE 754标准表示,无法精确地表示所有的十进制小数。
    • 在进行浮点型数据运算时,应特别注意精度丢失问题,尤其是在需要高精度计算的场景下。
  • 字符型数据转义字符
    • 字符型数据(char)在Java中占用16位(两个字节)的内存空间,可以表示Unicode字符集中的字符。
    • 在使用字符型数据时,需要注意转义字符的使用。例如,\n 表示换行符,\\ 表示反斜杠字符等。
    • 如果不正确地使用转义字符,可能会导致字符型数据的值不符合预期。
  • 布尔型数据逻辑判断
    • 布尔型数据(boolean)只有两个值:truefalse
    • 在进行逻辑判断时,应确保布尔型变量的值正确反映了逻辑条件的结果。
    • 避免在逻辑判断中使用复杂的表达式,以免导致逻辑错误。
  • 数据类型转换
    • 在Java中,基本数据类型之间可以进行类型转换。但是,如果转换类型不兼容或转换方式不正确,可能会导致编译错误或运行时异常。
    • 例如,不能将 double 类型的值直接转换为 int 类型而不进行特殊类型转换,因为 double 类型的取值范围比 int 类型大得多,直接转换会导致精度丢失或数据溢出。
    • 在进行数据类型转换时,应特别注意转换的兼容性和正确性。
  • 默认值问题
    • 在Java中,成员变量在声明后会有默认值(例如,int 类型的默认值为0,boolean 类型的默认值为 false 等)。但是,局部变量在声明后没有默认值,必须在使用前进行初始化。
    • 如果忘记了初始化局部变量,将会导致编译错误。
  • 标识符命名规范
    • 在Java中,标识符(包括变量名、方法名等)的命名需要遵循一定的规范。例如,不能以数字开头,不能是Java的保留字或关键字等。
    • 如果不遵循命名规范,将会导致编译错误或代码可读性降低。

最佳实践

为了避免这些潜在的问题,建议在使用Java基本数据类型时遵循以下最佳实践:

  • 细了解每种数据类型的取值范围和特点。
  • 在进行数据类型转换时,确保转换的兼容性和正确性。
  • 初始化所有局部变量,避免使用未初始化的变量。
  • 遵循Java的命名规范,确保代码的可读性和可维护性。
  • 在进行浮点数运算时,特别注意精度丢失问题,并考虑使用 BigDecimal 类等高精度计算工具。

常见面试题

Java基本数据类型是Java编程中的基础,以下是一些常见的面试题及其答案:

Java有哪些基本数据类型?

Java有八种基本数据类型,分别是:

  • 整型:byte(1字节)、short(2字节)、int(4字节)、long(8字节)
  • 浮点型:float(4字节)、double(8字节)
  • 字符型:char(2字节)
  • 布尔型:boolean(没有明确的字节数,通常通过单个字节实现(但在JVM中可能会以其他方式优化存储))

各基本数据类型所占的内存空间是多少?

  • byte:1字节
  • short:2字节
  • int:4字节
  • long:8字节
  • float:4字节
  • double:8字节
  • char:2字节
  • boolean:没有明确的字节数,通常通过单个字节实现(但在JVM中可能会以其他方式优化存储)

boolean类型在JVM中是如何表示的?

在JVM中,boolean类型并没有专用的字节码指令,而是使用int类型来表示。当boolean值为true时,用非零值表示(通常是1);当boolean值为false时,用0表示。然而,在boolean数组中,每个boolean值通常只占用1位(bit),而不是一个完整的字节。

Java中的包装类是什么?

Java为每种基本数据类型都提供了对应的包装类(Wrapper Class),它们位于java.lang包中。包装类允许将基本数据类型作为对象来处理,提供了更多的功能和灵活性。基本数据类型及其对应的包装类如下:

  • byte -> Byte
  • short -> Short
  • int -> Integer
  • long -> Long
  • float -> Float
  • double -> Double
  • char -> Character
  • boolean -> Boolean

字符型数据char可以存储什么?

char类型用于存储单个字符,它可以存储Unicode字符集中的任何字符。Unicode字符集包括了世界上大多数语言的字符,因此char类型具有很强的字符表示能力。

浮点型数据float和double的精度问题?

float和double类型都是用于存储浮点数的,但它们的精度不同。float类型是单精度浮点数,通常提供大约7位有效数字的精度;而double类型是双精度浮点数,提供大约15位有效数字的精度。由于浮点数的表示方式(IEEE 754标准),它们在某些情况下可能无法精确地表示所有的十进制小数,因此在进行浮点数运算时需要注意精度丢失问题。

整型数据溢出问题?

当整型变量的值超出了其取值范围时,会发生数据溢出。例如,int类型的取值范围是-2^31 ~2^31 - 1,如果尝试存储超出这个范围的值,将会导致数据溢出。数据溢出后,变量的值会按照二进制补码的方式循环表示,这可能会导致不可预测的结果。

基本数据类型之间的转换规则?

Java中的基本数据类型之间可以进行转换,转换规则如下:

  • 自动类型转换(隐式转换):小范围类型可以自动转换为大范围类型,例如int可以自动转换为long,float可以自动转换为double。
  • 强制类型转换(显式转换):大范围类型需要显式地转换为小范围类型,这可能会导致数据丢失或精度降低。例如,double需要强制转换为float,long需要强制转换为int。

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

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

相关文章

Spring 和 javaEE的关系

我的理解: 相当于其实只用javaee的规范其实已经可以直接写后端系统了。但是Spring集成扩展了javaee,提供了一套更方便好用的编程规范,可以更高效便捷的写后端系统。 具体介绍: Java EE(现在称为 Jakarta EE&am…

003 Springboot操作RabbitMQ

Springboot整合RabbitMQ 文章目录 Springboot整合RabbitMQ1.pom依赖2.yml配置3.配置队列、交换机方式一:直接通过配置类配置bean方式二:消息监听通过注解配置 4.编写消息监听发送测试5.其他类型交换机配置1.FanoutExchange2.TopicExchange3.HeadersExcha…

AsyncTask的工作原理和缺陷

AsyncTask的工作原理及其缺陷 AsyncTask是Android平台提供的一个轻量级的异步任务类,它允许开发者在后台线程中执行耗时操作,并在操作完成后将结果回调到主线程以更新UI。AsyncTask内部封装了线程池和Handler机制,简化了多线程编程的复杂性。…

4D-fy: Text-to-4D Generation Using Hybrid Score Distillation Sampling技术路线

这篇文章分为四部分,首先从2021年的CLIP说起。 这篇论文的主要工作是提出了一种名为 CLIP(Contrastive Language-Image Pre-training) 的模型,它通过自然语言监督学习视觉模型,以实现视觉任务的零样本(zer…

20 Shell Script输入与输出

标出输入、标准输出、错误输出 一、程序的基本三个IO流 一)文件描述符 ​ 任何程序在Linux系统中都有3个基本的文件描述符 ​ 比如: ​ cd/proc/$$/fd ​ 进入当前shell程序对于内核在文件系统的映射目录中: [rootlocalhost ~]# cd /proc/$$/fd [rootlocalhos…

springcloud之基于RabbitMQ消息总线方式刷新配置服务

前言 在微服务架构中,为了更方便的向微服务实例广播消息,我们通常会构建一个消息中心,让所有的服务实例都连接上来,而该消息中心所发布的消息都会被微服务实例监听和消费,我们把这种机制叫做消息总线(SpringCloud Bus)…

Web集群服务-代理和负载均衡

1. 概述 1. 用户----->代理--->Web节点,后面只有一个节点,一般使用的是nginx代理功能即可 2. 后面如果是集群需要使用nginx负载均衡功能 2. 代理分类 代理分类方向应用正向代理用户(服务器)-->代理--->外部(某网站)服务器通过代理实现共享上网/访问公网反向代理用…

Linux:进程控制(三)——进程程序替换

目录 一、概念 二、使用 1.单进程程序替换 2.多进程程序替换 3.exec接口 4.execle 一、概念 背景 当前进程在运行的时候,所执行的代码来自于自己的源文件。使用fork创建子进程后,子进程执行的程序中代码内容和父进程是相同的,如果子进…

Python基础语法条件

注释 注释的作用 通过用自己熟悉的语言,在程序中对某些代码进行标注说明,这就是注释的作用,能够大大增强程序的可读性。 注释的分类及语法 注释分为两类:单行注释 和 多行注释。 单行注释 只能注释一行内容,语法如下…

跟着小土堆学习pytorch(一)——Dataset

文章目录 一、前言二、dataset三、代码展示 一、前言 pytorch也是鸽了很久了,确定了下,还是用小土堆的教程。 kaggle获取数据集 二、dataset dateset:数据集——提供一种方式去获取数据及其标签 如何获取数据及其标签以及总共多少个数据…

PostgreSQL学习笔记六:模式SCHEMA

模式(Schema) PostgreSQL中的模式(Schema)是一个命名的数据库对象集合,包括表、视图、索引、数据类型、函数、存储过程和操作符等。模式的主要作用是组织和命名空间数据库对象,使得同一个数据库中可以包含…

基于gewechat制作第一个微信聊天机器人

Gewe 个微框架 GeWe(个微框架)是一个创新性的软件开发框架,为个人微信号以及企业信息安全提供了强大的功能和保障。GeWe的设计旨在简化开发过程,使开发者能够高效、灵活地构建和定制通信协议,以满足不同应用场景的需求…

JavaScript object(2)

这样的话,就变成只读了。

外包干了5天,技术明显退步

我是一名本科生,自2019年起,我便在南京某软件公司担任功能测试的工作。这份工作虽然稳定,但日复一日的重复性工作让我逐渐陷入了舒适区,失去了前进的动力。两年的时光匆匆流逝,我却在原地踏步,技术没有丝毫…

“八股文”面试:助力、阻力还是空谈?

在当今的IT行业,面试程序员时提及“八股文”已成为一种普遍现象。所谓“八股文”,通常指的是一系列固定的、标准化的面试问题及其解答,这些问题往往涵盖了计算机科学和软件工程的基础知识,以及一些流行的技术框架和算法。然而&…

Qualitor checkAcesso.php 任意文件上传漏洞复现(CVE-2024-44849)

0x01 漏洞概述 Qualitor 8.24及之前版本存在任意文件上传漏洞,未经身份验证远程攻击者可利用该漏洞代码执行,写入WebShell,进一步控制服务器权限。 0x02 复现环境 FOFA:app="Qualitor-Web" 0x03 漏洞复现 PoC POST /html/ad/adfilestorage/request/checkAcess…

【IC验证】随机约束

1.约束 (1)注意 一般随机约束只能在类中使用; (2)实现步骤 在定义变量时,用rand/randc关键字进行修饰; 定义约束; 创建并实例化类后,调用随机约束方法; &am…

光平面标定代码

本篇文章主要给出光平面标定代码,鉴于自身水平所限,如有错误,欢迎批评指正。(欢迎进Q群交流:874653199) 数据分为棋盘格数据和激光条数据,激光条数据为在第22个位姿至第26个位姿下打在棋盘格标定…

初识Linux之指令(二)

一:head指令 head 与 tail 就像它的名字一样的浅显易懂,它是用来显示开头或结尾某个数量的文字区块,head 用来显示档案的 开头至标准输出中,而 tail 想当然尔就是看档案的结尾。 语法:head 【参数】 【文件】 功能&…

java Execl 写入png图片 解决

1、先拿到Execl 的所有图片 放到list /*** 获取图片和位置 (xls)** param sheet* return* throws IOException*/public Map<String, PictureData> getPictures(XSSFSheet sheet) throws IOException {Map<String, PictureData> map new HashMap<String, Pict…