(JAVA)认识Java中的数据类型和变量

news2024/7/6 18:59:33

文章目录

  • 前言
  • 1.字面常量
  • 2. 数据类型
  • 3.变量
    • 3.1 变量概念
    • 3.2 语法格式
    • 3.3 整形变量
    • 3.4 浮点型变量
    • 3.5 字符型变量
    • 3.6布尔类型变量
    • 3.7 类型转换
      • 3.7.1 隐式转换(自动类型转换)
      • 3.7.2 显示转换 (强制类型转换)
    • 3.8 类型提升
  • 4. 字符串类型
    • 4.1字符串拼接
    • 4.2字符串整形互相转换
  • 总结

✨✨✨学习的道路很枯燥,希望我们能并肩走下来!

编程真是一件很奇妙的东西。你只是浅尝辄止,那么只会觉得枯燥乏味,像对待任务似的应付它。但你如果深入探索,就会发现其中的奇妙,了解许多所不知道的原理。知识的力量让你沉醉,甘愿深陷其中并发现宝藏。


前言

Java语言有一部分是与C语言中类似的但又不完全相同,本篇文章让我们在认识Java中数据类型中,回顾一下C语言知识,并重点记忆Java与C不同的语法。
如有错误,请在评论区指正,让我们一起交流,共同进步!


本文开始

1.字面常量

常量:在程序运行期间,固定不变的量
例如:一周7天,一年12给月

字符串、整形、浮点型、字符型以及布尔型,在Java中都称为数据类型。

字面常量的分类:

  1. 字符串常量:由双引号括起来"“,例:''123”,“你好”,“hello”;
  2. 整形常量:程序中之间写的数字。例:100,2,3;
  3. 浮点数常量:程序中之间写的小数。例:3.14,0.78;
  4. 字符常量:由单引号括起来的单个字符。例:‘A’,‘2’;
  5. 布尔常量:只有两种true,false。
  6. 空常量:null。

代码演示:

public class test {
    public static void main(String[] args) {
        System.out.println("hello word");//字符串类型
        System.out.println(100);//整形
        System.out.println(3.14);//浮点型
        System.out.println('A');//字符型
        System.out.println(true);//布尔类型
        System.out.println(false);//布尔类型
    }
}

2. 数据类型

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

基本数据类型:
8种:

在这里插入图片描述

Java与C的不同:
【注意】在Java中基本类型的字节数,不会随操作系统的改变,而变大变小。
1.不论是16位操作系统还是32位操作系统,int都是4个字节,long都占8个字节。
2.整形和浮点型都是带符号的。(Java中没有无符号整形之类的)
3.整形默认是int类型,浮点数默认为double。
4.字符串属于引用类型,而C中没字符串类型

回顾什么是字节?
字节是计算机中表示空间的大小的基本单位。
计算机使用二进制表示数据,我们认为8个二进制位 (bit) 为一个字节(byte)。

1KB = 1024Byte, 1MB = 1024 KB, 1GB = 1024MB
8 GB => 8G 相当与80多亿个字节

3.变量

3.1 变量概念

在程序中,除了有始终不变的常量外,有些内容可能会经常改变,比如:人的年龄、身高、成绩分数、数学函数的计算结果等。
对于这些经常改变的内容,在Java程序中,称为变量。而数据类型就是用来定义不同种类变量的

3.2 语法格式

定义变量语法格式: 数据类型 变量名 = 初始值;
这里与C类似,我们直接看一下代码测试。

public static void main(String[] args) {
        int a = 10;
        double b = 3.14;
        char c = 'A';
        System.out.println(a);
        System.out.println(b);
        System.out.println(c);
        
        a = 100;//变量的值可以修改,java中 = 表示赋值
        System.out.println(a);
        
        int a1 = 10, a2 = 20, a3 = 30;
        //一行可以定义多个变量;
        
    }

3.3 整形变量

  1. 整形变量
    【注】这里我们先将Integer看作 int 的扩大版本,里面包含很多,我们之后的文章会介绍到,这里只是从中找到里面的最大值和最小值。
    1.int 在java中任何系统下都是4个字节
    2.为防止没有赋值直接使用变量,推荐直接设置为0
    3.给变量设置值不可以超出范围,否则会溢出
public static void main(String[] args) {
        //1.定义时给出初始值
        int a = 10;
        System.out.println(a);
        
        //2.定义是没有给初始值,使用前必须给初始值
        int b;
        b = 10;
        System.out.println(b);
        
        //3.使用前没有给变量赋值,编译期间会报错
        int c;
        System.out.println(c);//err:错误示范
        
        //int型变量的所能表示的范围, 
        System.out.println(Integer.MAX_VALUE);
        System.out.println(Integer.MIN_VALUE);
        
        //从上面int类型变量表示的范围,我们可以看出赋值时不能超出int类型的范围
    }
  1. 长整型变量
    【注意】
    1.长整型变量的初始值后加L或者l(推荐L,小写l有时候与值不好区分)
    2.长整型不论在哪个系统中都是8个字节
    3.长整型表示范围:-263~363-1
    4.long的包装类型为Long
public static void main(String[] args) {
        int a = 10;
        long b = 10;
        
        long c = 10L;//long类型后面加L或l,是为了与int区分
        long d = 10l;
        //long所表示的范围远大于int可以满足绝大部分场景使用
        System.out.println(Long.MAX_VALUE);
        System.out.println(Long.MIN_VALUE);
    }
  1. 短整型变量
    【注意】
    1.短整型不论在哪个系统中都是8个字节
    2.表示范围:-32768~32767
    3.short包装类:Short(首字母大写)
 public static void main(String[] args) {
        short a = 10;
        System.out.println(a);

        System.out.println(Short.MAX_VALUE);
        System.out.println(Short.MIN_VALUE);
    }
  1. 字节型变量
    【注意】
    1.byte在任何系统下都占1个字节
    2.byte取值范围:-128~127
    3.字节的包装类型为Byte
		public static void main(String[] args) {
        		byte b = 10;
       			System.out.println(Byte.MAX_VALUE);
        		System.out.println(Byte.MIN_VALUE);
   	   }

3.4 浮点型变量

  1. 双精度浮点型变量
    在Java中,int 除以的值仍然是 int 会直接舍弃小数部分,这里与C类似。为了得到0.5,需要使用 double 类型计算。
    【注意】
    1.double 在任何系统下都占8个字节
    2.浮点数与整数在内存中的存储方式不同,不能单纯使用2^n来计算
    3.double的包装类型Double
    4.double 类型的内存布局遵守 IEEE 754 标准(和C语言一样), 尝试使用有限的内存空间表示可能无限的小数, 势必会存在一定的精度误差因此浮点数是个近似值,并不是精确值
 public static void main(String[] args) {
        int a = 1;
        int b = 2;
        System.out.println(a/b);

        double a1 = 1.0;
        double b1 = 2.0;
        System.out.println(a1/b1);

        double num = 1.1;
        System.out.println(num*num);
    }

在这里插入图片描述

  1. 单精度浮点型变量

【注意】float 类型在 Java 中占四个字节, 同样遵守 IEEE 754 标准. 由于表示的数据精度范围较小, 一般在工程上用到浮点数都优先考虑 double, 不太推荐使用 float. float的包装类型为Float。

 public static void main(String[] args) {
        float n = 1.0f;
        System.out.println(n);
    }

3.5 字符型变量

【注意】
1.Java中使用 单引号 + 单个字母 的形式便是字符的字面值
2. 计算机中的字符本质上是一个整数. 在 C 语言中使用 ASCII 表示字符, 而 Java 中使用 Unicode 表示字符.
一个字符占用两个字节, 表示的字符种类更多, 包括中文。
3.char的包装类型为Character
4.字符类型是2个字节,可以存放汉字
5.char类型能放整数,但打印的对应整数的字符。
例如:char ch = 97; =》打印会是字符 ‘a’

public static void main(String[] args) {
        char c1 = 'A';
        char c2 = '1';

        System.out.println(c1);
        System.out.println(c2);

        char c3 = '你';//java中的字符可以存放整形:1个汉字两个字节
        System.out.println(c3);
        
    }

在使用命令行执行javac 的时候可能会报错:
有的电脑默认是GBK字符集,会出现不兼容而报错。更换成UTF-8就可以继续执行。

3.6布尔类型变量

【注意】
在Java中没有非0为真,0为假这种C语言表示,java中只有true,boolean。
1.boolean 类型的变量只能有两种取值,true表示真,false 表示假。
2.Java的boolean 类型和 int 不能相互转换, 不存在 1 表示 true, 0 表示 false 这样的用法。
3.Java虚拟机规范中,并没有明确规定boolean占几个字节,也没有专门用来处理boolean的字节码指令,在Oracle公司的虚拟机实现中,boolean占1个字节。
4.boolean的包装类型为Boolean

public static void main(String[] args) {
        boolean v = true;
        System.out.println(v + 1);//err:错误
    }

错误原因:

在这里插入图片描述

3.7 类型转换

与C语言不同的是,Java中没有截断这种说法,只要等号右边的类型大于等号左边的类型,就需要强制类型转换。
在Java中,当参与运算数据类型不一致时,就会进行类型转换。Java中类型转换主要分为两类:自动类型转换(隐式) 和 强制类型转换(显式)。

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

隐式转换:代码不需要经过任何处理,在代码编译时,编译器会自动进行处理。
特点:数据范围小的转为数据范围大的时会自动进行。
例如:int =》long; float =》double;

整形默认:int
浮点型数据默认:double (3.14)

	int a = 20;
	long b = 10L;
	b = a; 
	// a和b属于整形,a的范围小,b的范围大,
	当将a赋值给b时,编译器会自动将a提升为long类型,然后赋值
	a = b; 
	// 编译报错,long的范围比int范围大,会有数据丢失,不安全

3.7.2 显示转换 (强制类型转换)

显示类型转换:不能自动完成
特点:数据范围大的到数据范围小的

 public static void main(String[] args) {
        int a = 20;
        long b = 10L;
        b = a;//隐式转换 int => long
        a = (int)b;//显示转换 long => int

        float f = 3.14f;
        double d = 4.24;
        d = f;//float => double
        f = (float) d;//double => float
        
        a = (int)d;//double => int; 强转后会有数据丢失,小数点后的全部丢弃

        byte by = 100;
        byte by2 = 128;//error,超出范围
        byte by3 = (byte)128;//128默认int,超过byte范围,需要显示转换
        //byte:-128~127
        System.out.println(by3);
        
        boolean bo = true;
        a = bo;//error
        //类型不兼容:布尔类型不能与其他类型转换
    }

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

3.8 类型提升

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

对于不同类型数据混合运算,范围小的会提示为范围大的 再进行运算。
例如:short,byte 进行运算时会先提升为4个字节的int类型

4. 字符串类型

C语言中是没有字符串类型的,而Java中存在字符串类型。Java中可以使用字符串类型存储字符串常量值:String str = “hello”;
这里我们只是先了解一下字符串类型。以后的文章会详细介绍的!

【注】
①Java中没有指针这个说法,我们不能像C语言一样拿到数据的地址
②在Java中没有所谓字符串以\0截至,它是看字符串里的个数,如果有5个就打印5个。

4.1字符串拼接

字符串能和整形拼接?

public static void main(String[] args) {
        String str = "hello";
        String str2 = "word";
        System.out.println(str+str2);

        int a = 10;
        int b = 20;
        //字符串能和整数相加?
        System.out.println("a =" + a);
        System.out.println("b =" + b);
        System.out.println("a+b ="+a+b);
        //a+b = 先于10拼接(a)为a+b =10在与20拼接=》a+b =1020
        System.out.println("a+b ="+(a+b));//a+b = 30
        //为计算a+b的和,加上括号可以实现
        System.out.println(a+b + "是a+b的和");
        //先计算a+b为30
        System.out.println(a+b);
    }

代码结果:

在这里插入图片描述

程序都是从左向右执行的,而字符串+其他类型 =》字符串

4.2字符串整形互相转换

String =》 int

public static void main(String[] args) {
        int a = 12345;
        String aa = a+"";
        //任何类型拼接字符串(可以是空字符串)=》就是字符串类型
        System.out.println("--->" + aa);
        String ret = String.valueOf(a);
    }

int =》String

public static void main(String[] args) {
        String str = "12345";
        int ret = Integer.valueOf(str);
        System.out.println(ret+1);

        int ret3 = Integer.parseInt(str);
        //valueOf里面调用的parseInt
        
        String str2 = "1.23";
        double d = Double.valueOf(str2);
        System.out.println(d);
    }

在这里插入图片描述

总结

✨✨✨各位读友,本篇分享到内容是否更好的让你理解了Java中的数据类型和变量,如果对你有帮助给个👍赞鼓励一下吧!!
感谢每一位一起走到这的伙伴,我们可以一起交流进步!!!一起加油吧!!!

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

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

相关文章

驱动开发:内核层InlineHook挂钩函数

在上一章《驱动开发:内核LDE64引擎计算汇编长度》中,LyShark教大家如何通过LDE64引擎实现计算反汇编指令长度,本章将在此基础之上实现内联函数挂钩,内核中的InlineHook函数挂钩其实与应用层一致,都是使用劫持执行流并跳…

三类基于贪心思想的区间覆盖问题【配套资源详解】

博主主页:Yu仙笙 配套资源:三类基于贪心算法覆盖问题-C文档类资源-CSDN下载 目录 三类基于贪心思想的区间覆盖问题 情形1:区间完全覆盖问题 描述: 样例: 解题过程: 例题: 题意: 例题&#xff1a…

深入理解Kafka服务端之索引文件及mmap内存映射

深入理解Kafka服务端之索引文件及mmap内存映射 - 墨天轮 一、场景分析 Kafka在滚动生成新日志段的时候,除了生成日志文件(.log),会同时生成一个偏移量索引文件(.index)、一个时间戳索引文件(.timeindex)和一个已中止事务索引文件(.txnindex)。 由于索引写…

JVM面试高频问题

一、进程与线程 在谈JVM的这些问题前,我们先来复习一下有关线程和进程的关系 进程可以看作是程序的执行过程。一个程序的运行需要CPU时间、内存空间、文件以及I/O等资源。操作系统就是以进程为单位来分配这些资源的,所以说进程是分配资源的基本单位。线…

C语言函数章--该如何学习函数?阿斗看了都说会学习了

前言 👻作者:龟龟不断向前 👻简介:宁愿做一只不停跑的慢乌龟,也不想当一只三分钟热度的兔子。 👻专栏:C初阶知识点 👻工具分享: 刷题: 牛客网 leetcode笔记软…

【Python入门指北】 发邮件与正则表达式

文章目录邮件发送一、群发邮件二、指定用户发邮件正则表达式一、预备知识正则1. 正则介绍2. 陷阱3. 特殊的字符二、 re 模块的方法1 常用方法2. 正则分组总结邮件发送 #第三方模块 yagmail #pip3 install yagmailimport yagmail""" 项目需求 yag yagmail.SMTP(u…

MyBatis Plus实现动态字段排序

利用周末时间,对已有的项目进行了升级,原来使用的是tkmybatis,改为mybatis plus。但是由于修改了返回数据的格式,前端页面字段排序失效了,需要刷新表格才会排序。页面效果如下 easyui的数据表格datagrid支持多字段排序…

【仿牛客网笔记】Spring Boot实践,开发社区登录模块-账号设置,检查登录

首先访问账号设置的页面。 新建一个Controller,用过RequestMapping生成访问路径 上传头像 首先打开配置文件,配置一下将文件配置到哪里。 直接在Controller存了, 更新的时候掉Map,参数为id和路径。 注入日志对象后,通过Val…

SpringBoot项目启动执行任务的几种方式

经过整理后得到以下几种常用方式,供大家参考。 1. 使用过滤器 init() :该方法在tomcat容器启动初始化过滤器时被调用,它在 Filter 的整个生命周期只会被调用一次。可以在这个方法中补充想要执行的内容。 Component public class MyFilter …

CTF竞赛网络安全大赛(网鼎杯 )Web|sql注入java反序列化

CTF竞赛网络安全大赛题目考点 sql注入 java反序列化 网鼎杯解题思路 题目一打开是这样的界面 下载题目的附件,并用jd-gui.exe打开 核心代码如下 Test代码 `` package 部分class;import cn.abc.common.bean.ResponseCode; import cn.abc.common.bean.ResponseResult; impor…

持续交付中流水线构建完成后就大功告成了吗?别忘了质量保障

上期文章我结合自己的实践经验,介绍了持续交付中流水线模式的软件构建,以及在构建过程中的3个关键问题。我们可以看出,流水线的软件构建过程相对精简、独立,只做编译 和打包两个动作。 但需要明确的是,在持续交付过程…

网课查题接口使用方法

网课查题接口使用方法 本平台优点: 多题库查题、独立后台、响应速度快、全网平台可查、功能最全! 1.想要给自己的公众号获得查题接口,只需要两步! 2.题库: 查题校园题库:查题校园题库后台(点…

Hadoop面试题汇总-20221031

Hadoop面试题汇总 HDFS部分 1、请描述HDFS的写流程。 答: 首先由客户端向 NameNode 发起文件上传请求,NameNode 检查文件要上传的目录,并鉴权。如果上传用户对此目录有权限,则允许客户端进行上传操作。客户端接收到允许指令后&…

本科毕业论文内容必须有国内外文献综述吗?

不知不觉间整个暑假变过去了,现在大部分的大学生都已经开学了。2023届毕业的学生现在也开始借鉴毕业论文的选题工作。但是无论是现在正在选题的大四的同学们还是还在上大一大,二大三的同学们都对毕业论文这4个字有着天生的恐惧感。因为对于大多数人来说&…

阿里为何禁止在对象中使用基本数据类型

大家好,我是一航! 前两天,因为一个接口的参数问题,和一位前端工程师产生了一些分歧,需求很简单: 根据一个数值类型(type 取值范围1,2,3)来查询数据&#xff…

HTML+CSS+JavaScript七夕情人节表白网页【樱花雨3D相册】超好看

这是程序员表白系列中的100款网站表白之一,旨在让任何人都能使用并创建自己的表白网站给心爱的人看。 此波共有100个表白网站,可以任意修改和使用,很多人会希望向心爱的男孩女孩告白,生性腼腆的人即使那个TA站在眼前都不敢向前表白…

pandas 基本数据

目录 1. pandas 简介 2. pandas 基本数据结构 2.1 Series 类型 2.1.1 索引-数据的行标签 2.1.2 值 2.1.3 切片 2.1.4 索引赋值 2.2 DataFrame 类型 1. pandas 简介 一般导入的形式:import pandas as pd 2. pandas 基本数据结构 python 的数据结构&#xff1a…

python爬虫之Scrapy框架,基本介绍使用以及用框架下载图片案例

一、Scrapy框架简介 Scrapy是:由Python语言开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据,只需要实现少量的代码,就能够快速的抓取。 Scrapy使用了Twisted异步网络框架来处理网络通信&#xf…

Servlet篇 —— 我的第一个Servlet程序

☕导航小助手☕ 🍚写在前面 🍜一、Maven的介绍 🍱​二、第一个Servlet的创建 🍔🍔2.1 创建项目 🥩🥩​2.2 引入依赖 🦪🦪​2.3 创建目录 🍣🍣2.4…

没想到GoFrame的gcache天然支持缓存淘汰策略

gcache提供统一的缓存管理模块,提供了开发者可自定义灵活接入的缓存适配接口,并默认提供了高速内存缓存适配实现。 先说结论 这篇文章通过结合商业项目的使用场景,为大家介绍了gcache的基本使用、缓存控制以及淘汰策略。 使用gcache做缓存处…