Java-数据类型

Java-数据类型

  • 一、字面常量
  • 二、数据类型
    • (1)基本数据类型
  • 三、变量
    • 1、变量概念
    • 2、语法格式
      • (1)语法:
      • (2)示例:
    • 3、整型变量
      • (1)整型变量(int)
        • a.语法
        • b.最大值与最小值
        • c.注意
      • (2)长整型变量(long)
        • a.语法
        • b.最大值与最小值
        • c.注意
      • (3)短整型变量(short)
        • a.语法
        • b.最大值与最小值
        • c.注意
      • (4)字节型变量(byte)
        • a.语法
        • b.最大值与最小值
        • c.注意
    • 4、浮点型变量
      • (1) 双精度浮点型
        • a.语法
        • b.最大值与最小值
        • c.注意
      • (2)单精度浮点型
        • a.语法
        • b.最大值与最小值
        • c.注意
    • 5、字符型变量
        • a.语法
        • b.最大值与最小值
        • c.注意
    • 6、布尔型变量
        • a.语法
        • b.注意
    • 7、 类型转换
      • (1)自动类型转换(隐式转换)
      • (2)强制类型转换(显式转换)
      • (3)转换时的注意事项
      • (4)类型提升
        • int 与 long之间
        • byte与byte之间
        • 总结
  • 四、字符串变量
    • 1、字符串拼接
    • 2、int转String
    • 3、String转int

一、字面常量

字面常量顾名思义就是固定不变的量。
比如:

public class Demo{public static void main(String[] args){System.Out.println("hello world!");System.Out.println(100);System.Out.println(3.14);System.Out.println('A');System.Out.println(true);System.Out.println(false);}
}

在上面的代码中,helloworld1003.14等都是常量。那么根据这些常量的不同类型,可以将字面常量分为:

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

二、数据类型

在Java中数据类型分为两大类:基本数据类型引用数据类型

(1)基本数据类型

基本数据类型分为四大类:整型、浮点型、字符型以及布尔型
这四大类可以细分为八种
在这里插入图片描述
这里我们需要做几点说明,用来区别我们之前学过的C语言。

在C语言中,部分数据类型在32位电脑和64位电脑中是存在一定差异的。但是java中的数据类型不论是32位还是64位,都不会发生改变,这也就是可移植性的体现,如果大家阅读了作者上一章的内容:JavaSE介绍与第一个Java程序的话,就知道这种可移植性是与java的虚拟机有关的。

同时,整型和浮点型都是有符号的。

三、变量

1、变量概念

在我们的java程序中,除了有始终不变的字面常量外,还有一些量是变量,这些变量也是有分类的,比如有的变量是浮点数,有的变量是字符,因此刚刚介绍的数据类型就是来定义不同种类的变量的。

2、语法格式

(1)语法:

方式1:

数据类型 变量名 = 初始值;

当然也可以分开写:
方式2:

数据类型 变量名;
变量名 = 初始值;

如果我们要定义很多相同数据类型的变量,我们也可以采取以下方式:
方式3:

数据类型 变量名1 = 初始值1,变量名2 = 初始值2,变量名3 = 初始值3,...;

(2)示例:

方式1

int a = 10;
double b = 2.3;
char c = 'c';

方式2

int a;
a = 10;double b;
b = 20.1;

方式3

int a1 = 1, a2 = 2, a3 = 3;

3、整型变量

(1)整型变量(int)

a.语法
\\方式1
int a1 = 1;
\\方式2
int a2;
a2 = 2;
b.最大值与最小值

我们可以用以下方式输出int的最大值和最小值。

//最大值
System.out.println(Integer.MAX_VALUE);
//最小值
System.out.println(Integer.MIN_VALUE);
c.注意
  • 使用未初始化的变量会发生报错
  • 如果没有合适的初始值,可以先赋值为0。
  • 在给int赋值的时候,如果超过了int的范围,则会发生报错。
  • int的包装类型为 Integer。

(2)长整型变量(long)

a.语法
\\方式1
long a1 = 1L;
\\方式2
long a2;
a2 = 2L;

这里要在数值的后面加字母L,因为整型的字面常量默认是int类型的,因此如果我们给long类型的变量赋上超过int范围的数字的话,会出现报错,所以我们需要将字面常量转化为长整型。

b.最大值与最小值
//最大值System.out.println(Long.MAX_VALUE);
//最小值
System.out.println(Long.MIN_VALUE);
c.注意
  • long类型的赋值需要给数字加上L
  • 长整型不论在那个系统下都占8个字节。
  • long的包装类型为Long。

(3)短整型变量(short)

a.语法
\\方式1
short a1 = 1;
\\方式2
short a2;
a2 = 2;

short不需要将字面常量的int转化为short,因为short的范围比int小,所以我们不会遇到超过int范围的赋值情况。

b.最大值与最小值
//最大值
System.out.println(Short.MAX_VALUE);
//最小值
System.out.println(Short.MIN_VALUE);i
c.注意
  • short在任何系统下都占2个字节。
  • 使用时注意不要超过范围(一般使用比较少)。
  • short的包装类型为Short。

(4)字节型变量(byte)

a.语法
\\方式1
byte b1 = 10;
\\方式2
byte b2;
b2 = 10;
b.最大值与最小值
//最大值
System.out.println(Byte.MIN_VALUE);
//最小值
System.out.println(Byte.MAX_VALUE);
c.注意

4、浮点型变量

(1) 双精度浮点型

a.语法
double d1 = 1.0;
double d2;
d2 = 2.0;
b.最大值与最小值
//最大值
System.out.println(Double.MAX_VALUE);
//最小值
System.out.println(Double.MIN_VALUE);
c.注意
  • double在任何系统下都占8个字节。
  • double 类型的内存布局遵守 IEEE 754 标准(和C语言一样), 尝试使用有限的内存空间表示可能无限的小数, 势必会存在一定的精度误差,因此浮点数是个近似值,并不是精确值。
    为了证明这一点,我们可以运行以下代码:
public class HelloWorld {public static void main(String[] args) {double d1 = 1.1;double d2 = 1.1;System.out.println(d1 * d2);}
}

我们会发现运行结果为:
在这里插入图片描述

  • double的包装类型为Double。
  • 在运算过程中只有至少存在一个浮点数的时候,结果才是浮点数。

(2)单精度浮点型

a.语法
//方式1:
float a1 = 1.2f;
//方式2:
float b1;
b1 = 2.1f;
b.最大值与最小值
//最大值
System.out.println(Float.MAX_VALUE);
//最小值
System.out.println(Float.MIN_VALUE);
c.注意
  • 浮点型的字面常量默认是double类型的,所以如果我们想给浮点型赋值的话,我们需要在字面常量的后面加上字符f
  • float 类型在 Java 中占四个字节, 同样遵守 IEEE 754 标准. 由于表示的数据精度范围较小, 一般在工程上用到浮点数都优先考虑 double, 不太推荐使用 float. float的包装类型为Float。

5、字符型变量

a.语法
//方式1:
char a1 = 'a';
//方式2:
char a2;
a2 = 'b';
b.最大值与最小值
 System.out.println(Character.MAX_VALUE);System.out.println(Character.MIN_VALUE);
c.注意
  • 计算机中的字符本质上是一个整数。在 C 语言中使用 ASCII 表示字符, 而 Java 中使用 Unicode 表示字符. 因此一个字符占用两个字节, 表示的字符种类更多, 包括中文。
  • char的包装类型为Character。

6、布尔型变量

a.语法
//方式1:
boolean b1 = true;
//方式2:
boolean b2;
b2 = false;
b.注意
  • boolean 类型的变量只有两种取值, true 表示真, false 表示假。
  • Java 的 boolean 类型和 int 不能相互转换,== 不存在 1 表示 true, 0 表示 false 这样的用法==。
  • Java虚拟机中并没有明确地规定boolean类型占几个字节,也没有专门用来处理boolean的字节码指令,在Oracle公司的虚拟机实现中,boolean占1个字节。
  • boolean的包装类型为Boolean。

7、 类型转换

Java是一个强类型的语言,即当不同类型之间的变量相互赋值的时候,会有严格的类型校验规则。

在Java中,当参与运算数据类型不一致时,就会进行类型转换。Java中类型转换主要分为两类:自动类型转换(隐式) 和 强制类型转换(显式)。

(1)自动类型转换(隐式转换)

什么叫自动类型转换?自动类型转换即:代码不需要经过任何处理,在代码编译时,编译器会自动进行处理。
那么什么情况下会进行自动类型转换呢?
当我们将数据范围小的转为数据范围大的时候,编译器会自动进行类型转换。
比如下面的代码:

public class HelloWorld {public static void main(String[] args) {int a = 100;long b = 200;b = a;//将int赋值给long,int会自动转化为long}
}

那么如果我们反过来呢?我们将long赋值给int,那么此时由于是需要将long转换为int,即大范围转小范围的过程,所以此时不会发生自动类型转换,编译器会出现报错。
如下图所示:
在这里插入图片描述

(2)强制类型转换(显式转换)

强制类型转换:当进行操作时,代码需要经过一定的格式处理,不能自动完成。
特点:数据范围大的到数据范围小的时候,需要我们手动将大类型转化为小类型,转化的语法即我们在被转变量前加上(小范围的数据类型)
示例如下:

public class HelloWorld {public static void main(String[] args) {int a = 1;long b = 2;a = (int)b;byte b1 = (byte) 12456;double d1 = 3.14;float f1 = (float)d1;}
}

(3)转换时的注意事项

  1. 不同数字类型的变量之间赋值, 表示范围更小的类型能隐式转换成范围较大的类型。
  2. 如果需要把范围大的类型赋值给范围小的, 需要强制类型转换, 但是可能精度丢失。
  3. 将一个字面值常量进行赋值的时候, Java 会自动针对数字范围进行检查。
  4. 强制类型转换不一定能成功,不相干的类型不能互相转换(比如整型和布尔型)。

(4)类型提升

类型提升是指在进行表达式运算的时候,数据类型小的会被提升到数据类型大的

int 与 long之间
public class HelloWorld {public static void main(String[] args) {int a = 10;long b = 20;long c = a + b;//int + long表达式,int会被提升到long类型,所以转化成了long+long,结果也为longint d = a + b;//结果也为long,但是long结果给int需要强制类型转换,不转换会报错。}
}
byte与byte之间
public class HelloWorld {public static void main(String[] args) {byte a = 30;byte b = 120;byte c = a + b;//出现报错,java: 不兼容的类型: 从int转换到byte可能会有损失}
}

为什么byte之间的运算还与int的转化有关呢?

byte 和 byte 都是相同类型, 但是出现编译报错。原因是,虽然 a 和 b 都是 byte, 但是计算 a + b 会先将 a和 b 都提升成 int, 再进行计算,得到的结果也是 int, 这时赋给 c, 就会出现上述错误。

从硬件运算效率的角度分析:
由于计算机的 CPU 通常是按照 4 个字节为单位从内存中读写数据,为了硬件上实现方便,诸如 byte 和 short这种低于 4 个字节的类型,会先提升成 int, 再参与计算。

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

四、字符串变量

1、字符串拼接

public class HelloWorld {public static void main(String[] args) {String str1 = "ab";String str2 = "cd";String str3 = str1 + str2;System.out.println(str3);}
}

2、int转String

public class HelloWorld {public static void main(String[] args) {int num = 10;//方法1:String str1 = num + "";//方法2:String str2 = String.valueOf(num);}
}

其余类型的转化与之类似。

3、String转int

public class HelloWorld {public static void main(String[] args) {String str1 = "123";int a1 = Integer.parseInt(str1);System.out.println(a1+3);}
}

其余类型的转化与之类似。

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

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

相关文章

CentOS 搭建本地 yum 源方式 安装 httpd 服务

CentOS 搭建本地 yum 源方式 安装 httpd 服务 修改 yum 源 挂载光驱 mkdir -p /mnt/cdrom mount /dev/cdrom /mnt/cdromvi /etc/fstab追加以下内容: /dev/cdrom /mnt/cdrom iso9660 defaults 0 0手动修改CentOS-Base.repo 备份 yum 源配置文件 mv /etc/yum.re…

将Sketch文件转化为PSD文件的简单在线工具!

设计工作不仅需要UI设计工具,还需要Photoshop。常见的UI设计工具Sketch与Photoshop软件不兼容。如果你想在实际工作中完成Sketch转psd,你需要使用其他软件进行转换。但是在转换过程中容易丢失文件,导致同样的工作需要重复多次才能完成&#x…

OpenCV官方教程中文版 —— 2D 直方图

OpenCV官方教程中文版 —— 2D 直方图 前言一、介绍二、OpenCV 中的 2D 直方图三、Numpy 中 2D 直方图四、绘制 2D 直方图 前言 本节我们会学习如何绘制 2D 直方图,我们会在下一节中使用到它。 一、介绍 在前面的部分我们介绍了如何绘制一维直方图,之…

APP分发-CDN加速原理

摘要 CDN的全称是(Content Delivery Network),即内容分发网络。其目的是通过在现有的Internet中增加一层新的CACHE(缓存)层,将网站的内容发布到最接近用户的网络”边缘“的节点,使用户可以就近取得所需的内容,提高用户访问网站的…

辅助驾驶功能开发-功能规范篇(23)-2-Mobileye NOP功能规范

5.2 状态机要求 5.2.1 NOP/HWP 状态机 NOP/HWP状态机如下所示: 下表总结了这些状态: 状态描述Passive不满足功能条件,功能无法控制车辆执行器。Standby满足功能条件。该功能不是由驾驶员激活的。功能不控制车辆执行器。Active - Main功能由驾驶员激活。功能是控制…

Qt 序列化函数和反序列化函数

文章目录 界面学生类序列化函数反序列化函数刷新所选择的下拉表值添加 界面 学生类 // 创建学生信息类 class studentInfo { public:QString id; // 学号QString name; // 学生姓名QString age; // 学生年龄// 重写QDataStream& operator<<操作符&…

传智书城源码+课程设计文档基于JSP+Servlet实现

下载地址: https://juzhendongli.store/commodity/details/19 包括源码参考论文

华为---DHCP中继代理简介及示例配置

DHCP中继代理简介 IP动态获取过程中&#xff0c;客户端&#xff08;DHCP Client&#xff09;总是以广播&#xff08;广播帧及广播IP报文&#xff09;方式来发送DHCPDISCOVER和DHCPREQUEST消息的。如果服务器&#xff08;DHCP Server&#xff09;和 客户端不在同一个二层网络(二…

哪一个更好?Spring boot还是Node.js

前言 本篇文章有些与众不同&#xff0c;由于我自己手头有些关于这个主题的个人经验&#xff0c;受其启发写出此文。虽然SpringBoot和Node.js服务于很不一样的场景&#xff0c;但是这两个框架共性惊人。其实每种语言都有不计其数的框架&#xff0c;但仅仅一部分是真正卓越的。如…

计算机网络相关硬件介绍

计算机相关硬件 计算机由运算器、控制器、存储器、输入设备和输出设备等五个逻辑计算机硬件部件组成。 一、中央处理器&#xff08;CPU&#xff09;&#xff08;运算器、控制器&#xff09; &#xff08;1&#xff09;运算器 运算器是对数据进行加工处理的部件&#xff…

Ubuntu 内核降级到指定版本

reference https://www.cnblogs.com/leebri/p/16786685.html 前往此网站&#xff0c;找到所需的内核 https://kernel.ubuntu.com/~kernel-ppa/mainline/ 查看系统架构 dpkg --print-architecture 二、下载安装包 注意&#xff1a;下载除lowlatency以外的deb包 三、安装内核 3…

JAVA基础(JAVA SE)学习笔记(八)面向对象编程(高级)

前言 1. 学习视频&#xff1a; 尚硅谷Java零基础全套视频教程(宋红康2023版&#xff0c;java入门自学必备)_哔哩哔哩_bilibili 2023最新Java学习路线 - 哔哩哔哩 第二阶段&#xff1a;Java面向对象编程 6.面向对象编程&#xff08;基础&#xff09; 7.面向对象编程&…

题目 1056: 二级C语言-温度转换(python详解)——练气四层初期

✨博主&#xff1a;命运之光 &#x1f984;专栏&#xff1a;算法修炼之练气篇&#xff08;C\C版&#xff09; &#x1f353;专栏&#xff1a;算法修炼之筑基篇&#xff08;C\C版&#xff09; &#x1f352;专栏&#xff1a;算法修炼之练气篇&#xff08;Python版&#xff09; ✨…

单目3D目标检测 方法综述——直接回归方法、基于深度信息方法、基于点云信息方法

本文综合整理单目3D目标检测的方法模型&#xff0c;包括&#xff1a;基于几何约束的直接回归方法&#xff0c;基于深度信息的方法&#xff0c;基于点云信息的方法。万字长文&#xff0c;慢慢阅读~ 直接回归方法 涉及到模型包括&#xff1a;MonoCon、MonoDLE、MonoFlex、CUPNet…

buuctf_练[MRCTF2020]Ezaudit

[MRCTF2020]Ezaudit 掌握知识 ​ 网站源码泄露&#xff0c;代码审计&#xff0c;SQL注入的万能密码使用&#xff0c;mt_rand函数的伪随机数漏洞搭配php_mt_seed工具使用&#xff0c;随机数特征序列的生成 解题思路 打开题目链接&#xff0c;又发现是一个不错的网站界面&…

Linux shell编程学习笔记16:bash中的关联数组

上一节我们探讨了普通的数组&#xff0c;即使用数字下标来索引数组中不同的元素的数组&#xff0c;也可以称之为索引数组。 相比纯粹的数字&#xff0c;字符串不仅能表明含义&#xff0c;也更便于记忆使用&#xff0c;于是就有了关联数组。 一、关联数组概述 bash 从4.0开始支…

竞赛 深度学习图像修复算法 - opencv python 机器视觉

文章目录 0 前言2 什么是图像内容填充修复3 原理分析3.1 第一步&#xff1a;将图像理解为一个概率分布的样本3.2 补全图像 3.3 快速生成假图像3.4 生成对抗网络(Generative Adversarial Net, GAN) 的架构3.5 使用G(z)生成伪图像 4 在Tensorflow上构建DCGANs最后 0 前言 &#…

基于 nodejs+vue旅游推荐系统 mysql

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

vscode markdown 使用技巧 -- 如何快速打出一个Tab 或多个空格

背景描述&#xff1a; 我在使用VSCode&#xff0c;这玩意很好用&#xff0c;但是&#xff0c;有一个缺点是&#xff0c;我想使用Tab来做一些对齐&#xff0c;但是我发现在VSCode中&#xff0c;无论是Tab还是多个空格&#xff0c;最终显示出来的都是一个空格 使用代码可以实现打…

【VUE】ElementPlus之动态主题色调切换(Vue3 + Element Plus+Scss + Pinia)

前言 关于ElementPlus的基础主题色自定义可以参阅《【VUE】ElementPlus之自定义主题样式和命名空间》 有了上面基础的了解&#xff0c;我们知道ElementPlus的主题色调是基于CSS3变量特性进行全局控制的&#xff0c; 那么接下来我们也基于CSS3变量来实现主题色调的动态切换效果&…