【Java SE】基本数据类型

2023-11-09

大家好!我是保护小周ღ,本期为大家带来的是 Java的基本数据类型,内容会与C语言的基本数据类型进行基本的比较,数据类型提示,整型提升,以及简单了解 String 类型 ,进一步感受Java 的安全性。

C语言混不下去了,面向对象的编程太爽了~


目录

一、常量

二、基本数据类型

2.1 整型

int 整型

long  长整型

short  短整型

byte 字节型

2.2 浮点型

double 双精度 和 float 单精度

2.3  char 字符型

Unicode 字符集

2.4 布尔型

三、String 字符串类型

一、常量

常量就是在程序运行期间,不能被修改,固定不变的量叫常量。

相较于C 语言来讲,Java 的基本数据类型多了个字符串类型,还是一个byte 类型,属于整型数据,后面再给大家介绍。

字面常量的分类:
1. 字符串常量:由""括起来的,比如“12345”、“Hello World!”、“你好”。
2. 整形常量:程序中直接写的数字没有小数点,比如:100、1000
3. 浮点数常量:程序中直接写的小数,比如:3.14、0.49
4. 字符常量:由 单引号 括起来的当个字符,比如:‘A’、‘1’
5. 布尔常量:只有两种true和false
6. 空常量:null 

这里浅提一手 null ,NULL 在C语言中,一般是给指针类型的变量赋值的,代表存储的地址为空,Java 当中没有指针类型,但是有引用,同样可以存储地址,但是不能对地址进行操作。

其余数据类型且听我慢慢道来……


二、基本数据类型

Java 的基本数据类型有 八种:

2.1 整型

int 整型

首先当然是介绍我们最最最常用的 int

public class Main {
    public static void main(String[] args) {
        int a=10; //定义了一个整型数据 a 并初始化为10

        System.out.println(a);
        System.out.println(Integer.MAX_VALUE);
        System.out.println(Integer.MIN_VALUE);
    }
}

 Java 当中 整型数据默认是有符号(signed)的,没有无符号(unsigned)之分(java ,没有所谓的无符号和有符号位的概念)其次在给变量设置初始值时,不能超过该数据类型的表示范围,否则就会造成溢出,编译器会报错,变量在使用之前也必须赋初值,这些在 Java中都是错误。Integer 这个是 int的包装类,可以理解为将一些功能集成在一起,

其中MAX_VALUE  就是输出 int 类型的最大值,MIN_VALUE 就是输出 最小值

所以一个 int 类型的数据 取值范围为 [-2^31, 2^31 -1] ;


long  长整型

public static void main(String[] args) {
        int a = 10;
        long b = 20;
        long c = 30L;
}

为了区分 int 和 long 类型,一般是在初始化的时候在数值后面加 大写的L ,小写的也可,但是小写的不易区分, 不加L的话 20 默认是整型数据(int )但是这没有错,后面讲。

C 语言的long 类型具体占几个字节没有固定的说法 ,即 long >= int  ,在  vs 2019 集成开发环境32位环境下 long 占4个字节, 有些编译器可能是8个字节,但是在 64 位环境下就是 8 个字节,Java中就没有计较这么多, 不管操作系统是多少位,平台是多少位 都没有关系,long 类型就是8个字节,取值范围就是[-2^63 , 2^63 - 1];


short  短整型

public static void main(String[] args) {
        short a = 10;
        //short 类型的取值范围
        System.out.println(Short.MAX_VALUE);
        System.out.println(Short.MIN_VALUE);
}

short 在 Java 中占2个字节 ,数值的表示范围 [-2^15,2^15-1] , 这个类型用的少,还有大家有没有注意一个点,上面说过 , 在初始化的时候,初始化的值(常量)默认是整型4个字节, 那编译器为啥不报错呢,原因是编译器会帮我们检查如果 常量值的范围在该类型数值的表示范围内就不会报错,如果是一个 整型int 类型给低字节的变量赋值那编译肯定是不被允许的,报错除非 像 C 语言那样(类型)变量, 强制类型转换,但是会对被转数值的变量值精度造成损失 , 比如人家存了 4 个字节的二进制位 , 你把他强转为 short 类型, 就只剩下 16 个二进制位描述数据,哪能一样嘛。


byte 字节型

 public static void main(String[] args) {
        byte a = 10;
        byte b = 20;
        // byte 类型数值的取值范围
        System.out.println(Byte.MAX_VALUE);
        System.out.println(Byte.MIN_VALUE);
    }

 byte 类型 是C语言没有的一个类型,只有一个字节,额,取值范围如图所示,有一点比较值得注意。

 很奇怪啊, 报错了,10 ,20 都是在byte 数值的取值范围内,哪怕他们相加的结果30也在范围内,怎么就错了呢,这里就涉及到一个知识点,整型提升,不足4个字节的数据在进行运算的时候会进行整型提升,a 跟 b 就是int 类型 了, 那将两个 int 类型的数据运算后的结果给到一个 byte 字节型变量 ,那肯定装不下的嘞,还有一点就是,不足4个字节的整型 在打印时也会提升至4字节打印。

 这样就没有任何问题啦,

用 short 类型也会报错,咱就是说 >=  int 才可以。

 那如果是说这样:

public static void main(String[] args) {
        int a = 10;
        int b = 10;
        long sum = a+b;
        System.out.println(sum);
}

这就不是整型提升了, 这个叫类型提升, 在运算时int 会提升至long 类型参与运算,没有任何问题。

C语言 整型提升规则:一般用于不足整型(4个字节)的数据,有符号位根据符号位,高位补齐,无符号位,直接高位补0。

Java 安全性好,很多你没注意到的地方,集成开发环境都能很好的帮你找出来,即使是这样,我们还是要避免这些不应该的错误,养成良好的编程习惯。

高字节类型(强制类型转换)为低字节类型,就会发生截断,保留低位,舍去高位,如果不是强转是自己的疏忽造成的原因Java编译就通过不了。

1. 不同类型的数据混合运算, 范围小的会提升成范围大的.
2. 对于 short, byte 这种比 4 个字节小的类型, 会先提升成 4 个字节的 int , 再运算.


2.2 浮点型

Java  的浮点型数据存储遵循  IEEE 754 标准(和C语言一样)

 这个起一个了解的目的,Java 当中可以不关注这些东西。


double 双精度 和 float 单精度

double 在Java 中占8 个字节,且所有小数默认是double 类型,使用的最多的是 double , 

  蛮智能的,会把后面的小数去掉。

用 C语言的输出格式也是没有问题的,想保留几位的话就 + %. 小数位数 f  ,printf() 格式化输出也是可以的 Java 保留了这种输出方式。 

在Java 中  int数据 除以 int 数据 的值仍然是 int(会直接舍弃小数部分),跟C语言一样的规则,整数乘除小数的结果是小数。


对于 float  类型来讲,这是一种错误……

你会觉得,e 其实是怎么回事呢,就上面说过啦,是 小数数值默认是 double 类型, 把 8个字节的数据给 4个字节得 float 装 ,可不报错嘛,是除非是强制类型转换,但会丢失精度,所以对 float 变量进行初始化的时候,初始化数值加 f 即可(大小写都行,通常是小写 f)。


2.3  char 字符型

public static void main(String[] args) {
        char ch1 = 'a'; // 单个字符也是两个字节
        char ch2 = '符'; //注意千万别使用引号“ ”,引号代表是字符串类型
        System.out.println(ch1);
        System.out.println(ch2);
}

 Java 的 char 类型 占2个字节,且没有负数,为什么呢,C语言中的  char 占1 个字节,使用的是 ASCLL 码字符集表示字符, 所以一个字节就可以了, Java 中采用的是 Unicode 编码表示字符,所以 Java 中的 char 类型有能力描述更多的字符,包括中文。

 char的包装类型为Character


Unicode 字符集

Unicode( 统一码、万国码、单一码)是计算机科学领域里的一项业界标准,包括字符集、编码方案等。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的 二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。1990年开始研发,1994年正式公布。

Unicode与ASCII一样也是一种字符编码方法,它占用两个字节(0000H—FFFFH),容纳65536 个字符,这完全可以容纳全世界所有语言文字的编码。在Unicode 里,所有的字符都按一个字符来处理, 它们都有一个唯一的Unicode 码。Unicode只是一个编码规范,目前实际实现的unicode编码只要有三种:UTF-8, UCS-2 和 UTF-16

如果把各种文字编码形容为各地的语言,那么 Unicode 编码就是世界各国通用的语言,在这种语言环境下,就不会有语言的编码冲突,Unicode 就是将世界上所有的文字用2 个字节 统一进行编码,所以他也被称之为 “万国码”


2.4 布尔型

布尔类型常用来表示真假,boolean 类型的变量只有两种取值, true 表示真, false 表示假,Java 的 boolean 类型和 int 不能相互转换, 不像 C 语言中 0 为假 ,非0 为真 ,boolean 只有 true 和 false ,不存在 0 为 假,1 为真的说法。

 Java 中的条件只能是 布尔表达式 即 表达式结果只能是 布尔类型,

在Java 当中 真只有 true  假只有 false

Java规范中并没有明确规定 boolean 占几个字节,也没有专门用来处理boolean的字节码指令,在
Oracle公司的虚拟机实现中,boolean占1个字节。


三、String 字符串类型

Java 有属于单独的字符串类型,注意:String 字符串类型,不属于基本数据类型,属于引用数据类型,这里先给大家简单的介绍一手,关于字符串类型的详细内容后期再给大家详细讲解。

 Java 输出的时候 输出项可以拼接,使用 +  有一点需要注意,当输出项出现 字符串时,

任何类型的数据 和 字符串拼接,结果就是字符串举个例子:

 大家可以看到无论是字符串常量还是字符串变量,只要输出语句里出现了,所有的都变成了字符串,表达式也无法计算,那怎么解决呢?

因为程序是从左往右执行的,所以我们可以把需要运算的表达式放最左边,最后再拼接字符串,但这样终究不是我们想要的效果,如果想把字符串放最左边,又想让 表达式计算,该怎么办呢?

 改变他的优先级,加() 将需要计算的表达式括起来,所以就会先计算,后拼接为字符串。


不知道大家有没有想过一个问题,就是,一个整型数据,或者是浮点型 数据等,怎么转换为字符串, 又或者怎么把字符串转换为 对应的数据类型,这个需要使用对应类型的 “包装类",后期再详细给大家介绍。

 字符串 转某个类型,前提是 该字符串, 能转,不要太离谱:


至此,初始Java 的基本数据类型 内容博主已经分享完了,希望对大家有所帮助,如有不妥之处欢迎批评指正。

 

 本期收录于博主的专栏——JavaSE,适用于编程初学者,感兴趣的朋友们可以订阅,查看其它“JavaSE基础知识”。

感谢每一个观看本篇文章的朋友,更多精彩敬请期待:保护小周ღ  *★,°*:.☆( ̄▽ ̄)/$:*.°★* 

文章存在借鉴,如有侵权请联系修改删除!​​

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Java SE】基本数据类型 的相关文章

  • 将特定项目移至列表末尾

    我有一个ArrayList in Java deleteItem createitem exportitem deleteItems createItems 我想移动包含的所有字符串delete到列表的末尾 所以我会得到下一个 create
  • Logback 上下文选择器的实际使用

    Logback 的文档测井分离 http logback qos ch manual loggingSeparation html表明我可以使用上下文选择器 http logback qos ch manual contextSelecto
  • OpenJDK 11 问题 - 客户端在上次 UNWRAP 之前完成握手

    我正在将代码库从 Oracle Java 1 8 0 131 迁移到 OpenJDK 11 0 1 我们有实现 nio ssl 套接字通道的代码 在 Java 8 中 客户端 服务器握手工作正常 在 Java 11 中 客户端在解包来自服务
  • 如何在java中以编程方式访问网页

    有一个网页 我想从中检索某个字符串 为此 我需要登录 单击一些按钮 填充文本框 单击另一个按钮 然后就会出现字符串 我怎样才能编写一个java程序来自动执行此操作 是否有任何有用的库用于此目的 Thanks Try HtmlUnit htt
  • spring-data-neo4j 基本一对多关系不持久

    EDIT 示例项目可在github https github com troig neo4jCustomRepository 我在后端项目中使用 Neo4J Rest 图形数据库 托管在 grapheneDb 中 和 Spring Data
  • Struts ActionForm 属性应该是什么类型?

    我使用 Struts 1 2 4 继承了这个巨大的遗留 Java Web 应用程序 我有一个关于 ActionForms 的具体问题 其中一些仅具有字符串属性 即使对于数字 其中一些使用看似合适的类型 整数 日期 字符串等 这里的最佳实践是
  • 由于 maven-surefire-plugin,Maven 构建失败

    我这里有类似的问题eclipse 中缺少 maven surefire plugin https stackoverflow com questions 23588957 maven surefire plugin missing in e
  • Maven 插件前缀解析如何工作?为什么它解决了“findbugs”而不是“jetty”?

    我正在使用 Maven 进行一些测试 并意识到我可以执行findbugsFindbugs 插件的目标 无需将插件添加到 POM 文件 另一方面 当我需要运行runJetty 插件的目标 我被迫将插件添加到 POM 文件中 否则构建失败 为什
  • json文件格式的升级路径

    我们将 Java 应用程序的用户首选项存储在 JSON 文件中 使用Jackson http jackson codehaus org 随着我们继续开发该应用程序 我们将添加首选项 重命名首选项并删除过时的首选项 当用户将应用程序升级到下一
  • 在 Spring Boot 异常处理期间保留自定义 MDC 属性

    简短版本 有足够的细节 如何保留添加在MDC中的属性doFilter 的方法javax servlet Filter执行 public void doFilter ServletRequest request ServletResponse
  • Spring Boot 1.4:Liquibase完成后的执行方法

    我有一个基于 Spring Boot 1 4 0 的项目 该项目使用 Liquibase liquibase 完成后是否可以执行方法 像 Bean 后处理器之类的东西 我想要做的是当应用程序在开发模式下启动时向我的数据库添加一些数据 在开发
  • 如何在 jax-ws 客户端中隐藏(可能)由 jax-ws 库引起的警告

    我正在使用 netbeans 在我的应用程序中生成 Web 服务客户端 我的程序使用 jax ws 库来设置调用 Web 服务的超时 出现问题是因为每当我启动这个程序时它都会生成很多这样的警告消息 2010 年 12 月 13 日下午 4
  • Windows:如何获取所有可见窗口的列表?

    无论如何都要使用相关技术重新标记 我不知道它们是什么 稍后我可能会提出更详细的问题 关于具体细节 但现在我正在尝试掌握 大局 我正在寻找一种方法来枚举 Windows 上的 真实可见窗口 我所说的 真正可见的窗口 就是指 用户所说的 窗口
  • AWS Lambda 和 S3 - 上传的 pdf 文件为空/损坏

    我有一个 Spring 应用程序 在 AWS Lambda 上运行 它获取文件并将其上传到 AWS S3 Spring控制器发送一个MultipartFile到我的方法 使用 Amazon API Gateway 将其上传到 AWS S3
  • CTRL-C 在 Python 中的行为有所不同

    I ve recently started learning Python long time Java programmer here and currently in the process of writing some simple
  • 无法实例化类对象的类型 (Java)

    这是我收到错误的代码 在 new 之后的第二个 Killer 处 String classes new String 5 kills 0 Brian Moser kills 1 James Doakes kills 2 Lila Tourn
  • 为什么 writeObject 抛出 java.io.NotSerializedException 以及如何修复它?

    我有这个异常 我不明白为什么会抛出它 或者我应该如何处理它 try os writeObject element catch IOException e e printStackTrace Where element is a Transf
  • 告诉 JAXB 使用注释将 解组为 Date 类

    将 JAXB 与 Java First 一起使用时 类型的字段 属性java util Date编组和解编为xs dateTime一切都按预期进行 但是如果字段 属性的类型是Object JAXB 解组xs dateTimeto XMLGr
  • JPA中如何连接多个数据库?

    我有一个 Spring Boot 应用程序 当前使用 JPA 连接到单个数据库 application properties 文件中的连接详细信息 spring datasource url jdbc oracle thin localho
  • 运行外部进程的非阻塞线程

    我创建了一个 Java GUI 应用程序 它充当许多低级外部进程的包装器 该实用程序按原样运行 但迫切需要一项重大改进 我希望我的外部进程以非阻塞方式运行 这将允许我并行服务其他请求 简而言之 我希望能够在生成数据时处理来自外部进程的数据

随机推荐

  • STM32HAL库 (cubemx) 两个HC05蓝牙模块相互通信相关问题的解决 数组串口发送与接受的方法

    主要问题 1 蓝牙模块的连接问题 2 蓝牙模块的工作模式 3 CUBEMX 配置串口注意事项 4 两个模块数据传输异常 前言 因为最近都在做基于STM32 MPU6050的手势控制机器人 遇到了无线数据传输的问题 正好手上有几个蓝牙模块 就
  • Latex系列2---段落编写+标题编写+目录生成

    接着上一节的简单中文文本 这节阐述的是一篇小规模文章的编写 段落编写 分段 写文章少不了分段的情况 latex中如何分段 先看一段代码和效果图 在这里我们看到代码中对于文章的分段有两种方式 1 空行 2 使用 par 空格 的形式 对于空行
  • blender基础笔记

    1 下载与安装 官网下载 官网下载 setam下载 steam下载 个人推荐这个 方便 修改语言 左上角 edit preferences Interface Transtation Langlish 疲了 看图吧 懒得写了 2 基础操作
  • 源码看CoordinatorLayout.Behavior原理

    http blog csdn net qibin0506 article details 50377592 在上一篇博客CoordinatorLayout高级用法 自定义Behavior中 我们介绍了如何去自定义一个CoordinatorL
  • Java中变量的作用域详解

    作用域定义 字面解释 scope 域即一定范围内的较大的地方 顾名思义就是在一定的范围内起作用 大白话解释 父母在家的时候能控制你的玩与学习 出了家门说了也白说 老师在校的时候能够管理你的行为 出了学校你都想管管他 这就是说 不管什么样的指
  • 单表数据量达多少时才建议分库分表

    1 阿里巴巴开发手册建议是 推荐 单表行数超过500万行或者单表容量超过2GB 才推荐进行分库分表 说明 如果预计三年后的数据量根本达不到这个级别 请不要在创建表时就分库分表 2 实际情况还要根据机器的配置视情况而定 3 阿里巴巴开发手册下
  • oracle生成UUID

    oracle生成UUID uuid Universally Unique Identifier 全局唯一标识符 是指在一台机器上生成的数字 它保证对在同一时空中的所有机器都是唯一的 按照开放软件基金会 OSF 制定的标准计算 用到了以太网卡
  • leetcode题解:最长公共前缀

    leetcode题解 最长公共前缀 题目描述 编写一个函数来查找字符串数组中的最长公共前缀 如果不存在公共前缀 返回空字符串 示例 1 输入 flower flow flight 输出 fl 示例 2 输入 dog racecar car
  • [Docker]Elasticsearch启动报错:Format version is not supported

    如果之前安装过Elasticsearch 安装新的Elasticsearch之前需要清空宿主机器对应的挂载目录下的文件数据
  • 打百万拳,走万里路。

    自我介绍 CSDN的大家你们好啊 我是一名大一的学生 与CSDN的相识还要从大一一次次查找知识点开始 当时由于刚接触编程 做什么都一头雾水而又不想去问老师那些简单的知识 于是自己在网上查找 就发现了CSDN这个大学生聚集地 由于很多都是和我
  • Python单重循环练习题

    第一次学python 求大佬指正 1 有1020个西瓜 第一天卖掉总数的一半后又多卖出两个 以后每天卖剩下的一半多两个 问几天以后能卖完 8天后能卖完 sum 1020 day 0 while sum gt 0 day 1 sum sum
  • 解决tomcat 启动超过45秒时间限制

    当在eclipse运行一个javaweb项目时 出现了如下图片中的问题 解决方法 1在如下页面中找到Servers 找不到的话可以通过Window gt gt Show View放到下方 2 双击Servers进到如下页面 3 打开箭头所指
  • C++: read SQL server data using System::Data::SqlClient;

    stdafx h stdafx h include file for standard system include files or project specific include files that are used frequen
  • 『学Vue2+Vue3』自定义指令、插槽、路由入门

    day05 一 学习目标 1 自定义指令 基本语法 全局 局部注册 指令的值 v loading的指令封装 2 插槽 默认插槽 具名插槽 作用域插槽 3 综合案例 商品列表 MyTag组件封装 MyTable组件封装 4 路由入门 单页应用
  • 20个最炫HTML5,jQuery和CSS3下拉菜单制作教程(附示例/源码)

    3 Level Navigation Menu 三级导航菜单 独具特色的导航菜单 包含CSS3渐变 多个子菜单和jQuery动画 CSS3 Minimalistic Navigation Menu 一个简单的CSS3动画导航菜单 SLIDE
  • python之logging模块详解

    python之 logging 模块 文章目录 python之 logging 模块 一 日志关概念 日志的作用 日志的等级 3 日志字段信息与日志格式 4 日志功能的实现 二 logging 模块介绍 什么是logging模块 loggi
  • Linux服务器启动tomcat的三种方式

    直接进入主题 首先cd进入tomcat的bin文件夹下 然后可以尝试以下三种启动方式 第一种 当前会话启动 startup sh 效果 然后tomcat就在后台启动了 我们还可以在当前会话中继续输入其它指令 比如 ps ef grep to
  • Source Insight 自动补全 C 关键字、keil 标准库关键字

    一开始遇到该问题疯狂 baidu bing 相关的 blog 寥寥无几 而且是差不多十年前的 blog 主要原因 Source Insight 默认不包含 C 库文件 keil 标准库 导致编辑代码时找不到 C 库的相关宏 变量类型 函数等
  • [1082]IDEA配置tomcat时出现的问题及解决(HTTP状态404-未找到)

    文章目录 问题1 没有新建环境变量 问题2 tomcat设置depolyment有误 问题1 没有新建环境变量 解决 在系统环境变量中添加变量CATALINA BASE和CATALINA BASE 两个变量的值都是tomcat的安装路径 如
  • 【Java SE】基本数据类型

    大家好 我是保护小周 本期为大家带来的是 Java的基本数据类型 内容会与C语言的基本数据类型进行基本的比较 数据类型提示 整型提升 以及简单了解 String 类型 进一步感受Java 的安全性 C语言混不下去了 面向对象的编程太爽了 目