Java 那些诗一般的 数据类型 (下篇)

本篇会加入个人的所谓鱼式疯言

❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言
而是理解过并总结出来通俗易懂的大白话,
小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的.
🤭🤭🤭可能说的不是那么严谨.但小编初心是能让更多人能接受我们这个概念 !!!

在这里插入图片描述

前言

在上一篇 Java 那些诗一般的数据结构(上篇)中我们主要讲解了

Java数据类型详解上篇链接

  • 字面常量:介绍了说明是常量,以及字面常量的概念和种类

  • 数据类型 : 说明了数据类型的概念和并举例种类

  • 变量: 分批次的介绍了变量的不同类型并进行初步的理解

而在本篇文章中主要内容还是围绕着数据类型之间的转化再讲解呢

目录

  1. 类型转化

  2. 类型提升

  3. 字符串类型

一. 类型转换

1. 类型转换的简介

Java 作为一个 强类型 编程语言, 当不同类型之间的变量相互 赋值 的时候, 会有教严格的 校验

 class Test10 {public static void main(String[] args) {int a = 10;long b = 100L;b = a; // 可以通过编译a = b; // 编译失败}
}

在这里插入图片描述

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

2.隐式(自动)类型转化

自动类型转换 即:代码 不需要经过任何处理 ,在代码编译时,编译器会 自动进行处理

特点:数据 范围小 的转为数据 范围大 的时会自动进行。

 class Test10 {public static void main(String[] args) {System.out.println(1024); // 整型默认情况下是intSystem.out.println(3.14); // 浮点型默认情况下是doubleint a = 100;long b = 10L;b = a; // a和b都是整形,a的范围小,b的范围大,当将a赋值给b时,编译器会自动将a提升为long类型,然后赋值
//         a = b; // 编译报错,long的范围比int范围大,会有数据丢失,不安全float f = 3.14F;double d = 5.12;d = f; // 编译器会将f转换为double,然后进行赋值
//         f = d; // double表示数据范围大,直接将float交给double会有数据丢失,不安全byte b1 = 100; // 编译通过,100没有超过byte的范围,编译器隐式将100转换为byte
//         byte b2 = 257; // 编译失败,257超过了byte的数据范围,有数据丢失}
}

在这里插入图片描述

int 类型 是可以转化为 long 类型

long 类型是不允许转化为 int 类型的

鱼式疯言

一句话总结

能转 的不能转

3.显式 (强制) 类型转换

class Test10 {public static void main(String[] args) {int a = 10;long b = 100L;b = a; // int-->long,数据范围由小到大,隐式转换System.out.println("b="+b);a = (int)b; // long-->int, 数据范围由大到小,需要强转,否则编译失败System.out.println("a="+a);float f = 3.14F;double d = 5.12;d = f; // float-->double,数据范围由小到大,隐式转换System.out.println("d="+d);f = (float)d; // double-->float, 数据范围由大到小,需要强转,否则编译失败System.out.println("f="+f);//         a =  d; // 报错,类型不兼容a = (int)d; // int没有double表示的数据范围大,需要强转,小数点之后全部丢弃System.out.println("a="+a);byte b1 = 100; // 100默认为int,没有超过byte范围,隐式转换System.out.println("b1="+b1);byte b2 = (byte)257; // 257默认为int,超过byte范围,需要显示转换,否则报错System.out.println("b2"+b2);boolean flag = true;
//         a = flag; // 编译失败:类型不兼容
//         flag = a; // 编译失败:类型不兼容}
}

在这里插入图片描述
是的,当我们需要把 大的类型 转化为 小的类型 时,就需要 赋值

我们就牵扯到了 强制类型转化

鱼式疯言

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

最后小编还想说

小的数据类型 是可以自动放在的数据类型的,但当我们强制 大的数据类型 时,是很有可能造成 一部分数据存储不下 ,造成 数据的丢失

二. 类型提升

不同类型的数据之间相互 运算 时,数据 类型小 的会被提升到数据 类型大 的。

1. intlong 之间

int 会被提升为 long

 class  Test5 {public static void main(String[] args) {int a = 10;long b = 20;
//        int c = a + b; // 编译出错: a + b==》int + long--> long + long 赋值给int时会丢失数据long d = a + b; // 编译成功:a + b==>int + long--->long + long 赋值给longSystem.out.println(d);}
}

在这里插入图片描述

2. byte与byte的运算

class  Test5 {public static void main(String[] args) {byte a = 10;byte b = 20;byte c = a  + b;System.out.println(c);}
}

在这里插入图片描述

结论: bytebyte 都是 相同类型 , 但是出现 编译报错 . 原因是,

虽然 ab 都是 byte , 但是计算 a + b 会先将 a 和 b 都提升成 int, 再进行计算, 得到的结果也是 int 这是赋给 c, 就会出现上述错误.

由于计算机的 CPU 通常是按照 4 个字节为单位从内存中 读写数据 . 为了硬件上实现方便,

诸如 byteshort 这种低于 4个字节的类型, 会先提升成 int , 再参与计算. 💥 💥 💥

鱼式疯言

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

三. 字符串类型

小伙伴们应该熟悉

在我们的C语言 中,是不存在 字符串 类型这个概念的

但在我们的 Java 中是存在 字符串 类型的变量的

1. 字符串类型的简介

Java 中使用 String类 定义 字符串 类型,比如:


class  Test5 {public static void main(String[] args) {String s1 = "hello";String s2 = " world";System.out.println(s1);System.out.println(s2);System.out.println(s1 + s2); // s1+s2表示:将s1和s2进行拼接}}

在这里插入图片描述

对于 Java 自身来说,是有字符串类型的,

并且 字符串 是可以进行用 加号 拼接

2. int 转 String

class  Test5 {public static void main(String[] args) {int num = 10;System.out.println("未转化之前 num+1="+(num+1));// 方法1String str1 = num + "";// 方法2String str2 = String.valueOf(num);System.out.println("转化之后 num+1="+(str2+1));System.out.println("转化之后 num+1="+(str1+1));}
}

在这里插入图片描述

是的,我们可以通过 两种方法 转为 字符串

鱼式疯言

  1. 直接带 双引号向上转化 为字符串
 String str1 = num + "";
  1. 使用 String.valueOf() 方法讲任意类型转化为 字符串
 String str2 = String.valueOf(num);

3. String 转化为 int

class  Test5 {public static void main(String[] args) {String str = "100";System.out.println("转化前 str+1:"+(str+1));int num = Integer.parseInt(str);System.out.println("转化后 num+1:"+(num+1));}
}

在这里插入图片描述

对于 字符串 转数字,我们只需要用 Integer.parseInt(str)

本节对只是对 字符串 进行简单的介绍,大家能够正常使用即可

后序会详细给小伙伴们介绍哦 💥 💥 💥

总结

  1. 类型转化: 我们认识了赋值时的类型转化并熟悉了两种不同的类型的转化方式

  2. 类型提升: 在运算时,注意也会发生的类型提升的理解

  3. 字符串类型: 理解的一种新的类型并明白字符串和其他类型的转化方式

可谓收获颇丰啊 💖 💖 💖 💖

如果觉得小编写的还不错的咱可支持 三连 下 ==(定有回访哦) == , 不妥当的咱请评论区 指正

希望我的文章能给各位宝子们带来哪怕一点点的收获就是 小编 创作 的最大 动力 💖 💖 💖

在这里插入图片描述

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

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

相关文章

【RAG实践】Rerank,让大模型 RAG 更近一步

RAGRerank原理 上一篇【RAG实践】基于LlamaIndex和Qwen1.5搭建基于本地知识库的问答机器人 我们介绍了什么是RAG,以及如何基于LLaMaIndex和Qwen1.5搭建基于本地知识库的问答机器人,原理图和步骤如下: 这里面主要包括包括三个基本步骤&#…

MySQL数据库在Windows和Linux中各种日志的默认路径

1. 二进制日志(Binary Log) 在Linux系统中,二进制日志的默认路径通常为: /var/lib/mysql/hostname-bin.log 其中hostname是你的服务器主机名。如果没有特别配置,日志名可能是mysql-bin.log。 在Windows系统中&…

3.1k Star的特斯拉数据伴侣神器

微信公众号:[开源日记],分享10kStart的优质开源项目。 TeslaMate 适用于你的 Tesla 的功能强大的自托管数据记录器。 用 Elixir 编写数据存储在 Postgres 数据库使用 Grafana 进行可视化和数据分析车辆数据发布到本地 MQTT Broker GitHub数据 3.1k stars121 watching458 forks…

非关系型数据库Redis部署与常用命令

前言 Redis是一个高性能的开源内存数据库,常用于缓存、会话存储和实时数据处理,它是一款非关系型数据库。在生产环境中,Redis通过将数据存储在内存中以及支持多种数据结构,提供了快速的读写能力,并且可通过持久化功能…

龙晰系统运维相关笔记

一、硬盘分区、格式化及挂载(可直接查看另一篇文章硬盘分区格式化,或参考以下命令) #查看硬盘设备号fdisk -lfdisk /dev/vdb#以下为输入fdisk /dev/vdb命令后可以使用的命令行m #查看选项n #新建分区p 新建主分区1 新建1号分区2048 输入初始磁…

laravel如何通过DB获取一条数据的指定字段并转成数组

在 Laravel 中,如果你想要通过原生数据库查询构建器(DB facade)获取一条数据的指定字段,并将其转换为数组,你可以这样做: 首先,使用 select 方法来指定你想要获取的字段,然后使用 w…

L1-020 帅到没朋友分数 (20)

一、题目要求 当芸芸众生忙着在朋友圈中发照片的时候,总有一些人因为太帅而没有朋友。本题就要求你找出那些帅到没有朋友的人。 输入格式: 输入第一行给出一个正整数N(≤100),是已知朋友圈的个数;随后N行…

2023一个前端人的杂谈

酒香也怕巷子深 年底提车,回河北过年,一路总是旅游的牌子,后来去满城滑雪,随拍了几张照片,才更加感受河北的魅力。 感觉仅仅是这一抹黄昏,就让这一行物超所值了,原来那句宣传语所言非虚:这么近,那么美,周末到河北,然而我认为实际的好处,可能不止如此。 作为一个出…

记录一次hss不能防护主机的问题

场景:hss的控制台显示不在防护中,其他云主机并没有这个情况。 故障发生的时间是昨天下午15点半左右,运维同事做了重启网卡的操作。service network restart 排查分析: 于是仔细的查看日志,发现报错如下&#xff1a…

SpringBoot学习之Kibana下载安装和启动(Mac版)(三十二)

一、简介 Kibana是一个开源的分析与可视化平台,设计出来用于和Elasticsearch一起使用的。你可以用kibana搜索、查看存放在Elasticsearch中的数据。Kibana与Elasticsearch的交互方式是各种不同的图表、表格、地图等,直观的展示数据,从而达到高级的数据分析与可视化的目的。 …

ChatGPT与生成式AI:教育领域内新的浪潮与挑战

随着ChatGPT和其他生成式AI技术,如GPT-3.5、GPT-4的出现,我们正见证教育领域一场前所未有的变革浪潮。这些技术不仅推动了教育方式的进步,也为学习者带来了全新的机遇和挑战。 NO.1教育变革的新浪潮 生成式AI技术,特别是ChatGPT&…

FPGA(Verilog)实现按键消抖

实现按键消抖功能: 1.滤除按键按下时的噪声和松开时的噪声信号。 2.获取已消抖的按键按下的标志信号。 3.实现已消抖的按键的连续功能。 Verilog实现 模块端口 key_filter(input wire clk ,input wire rst_n ,input wire key_in , //按下按键时为0output …

[C++][C++11][六] -- [线程库]

目录 1.thread类的简单介绍2.线程对象的构造方法1.无参构造2.带参构造3.移动构造4.注意 3.thread提供的成员函数4.获取线程id5.线程函数的参数问题1.指针2.借助std::ref函数3.借助lambda表达式 6.join和detach1.join()2.detach() 7.[mutex](http://在C11中,Mutex总共…

无忧网络验证系统 getInfo SQL注入漏洞复现

0x01 产品简介 无忧网络验证是一套安全稳定高效的网络验证系统,基于统一核心的通用互联网+信息化服务解决方案,是为软件作者设计的一套完整免费的网络验证体系。可以为开发的软件增加收费授权的功能,让作者开发的软件可以进行销售、充值、登陆等操作,并且提供防破解验证功能…

Go 中无缓冲通道与容量为1的缓冲通道的区别

作为学Go的菜鸟,之前我以为这两个应该是同一个东西,以为无缓冲通道是缓冲通道容量为1的一种特殊情况。然鹅,这俩货根本不是同一个东西。 无缓冲通道 无缓冲通道也称为同步通道,发送操作会阻塞,直到另一个 goroutine …

TDengine Schemaless(无模式写入)常见问题的原因及故障排除

Tips:使用版本:3.0.2.6 (一)TDengine ERROR (80003002): Invalid data format 格式化问题;如缺少必要的组成格式(时间戳、超级表等),或有字符串未作修饰符修饰,类似的还…

0基础如何进入IT行业?【模板】

0基础如何进入IT行业? 简介:对于没有任何相关背景知识的人来说,如何才能成功进入IT行业?是否有一些特定的方法或技巧可以帮助他们实现这一目标? 提醒:在发布作品前,请把不需要的内容删掉。 方…

工业通信原理——Modbus-RTU通信规约定义

工业通信原理——Modbus-RTU通信规约定义 前言 Modbus RTU是一种基于串行通信的通信协议,通常用于在设备之间进行数据通信。 Modbus-RTU通信规约定义 Modbus RTU通信规约的定义,包括客户机请求和服务器响应的基本流程: 物理层&#xff1…

c# wpf LiveCharts 饼图 简单试验

1.概要 c# wpf LiveCharts 饼图 简单试验 2.代码 <Window x:Class"WpfApp3.Window5"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schem…

javaScript中原型链

一、原型链 js 的对象分为普通对象和函数对象。每个对象都有__proto__ 但是只有函数对象 (非箭头函数) 才有 prototype 属性。 new的过程&#xff1a; 1、创建一个空的简单 javaScript对象 2、将空对象的 __proto__连接到该函数的 prototype 3、将函数的this指向新创建的对象…