本篇会加入个人的所谓鱼式疯言
❤️❤️❤️鱼式疯言
:❤️❤️❤️此疯言非彼疯言
而是理解过并总结出来通俗易懂的大白话,
小编会尽可能的在每个概念后插入鱼式疯言
,帮助大家理解的.
???可能说的不是那么严谨
.但小编初心是能让更多人能接受我们这个概念
!!!
前言
在上一篇 Java 那些诗一般的数据结构(上篇)中我们主要讲解了
Java数据类型详解上篇链接
字面常量:介绍了说明是常量,以及字面常量的概念和种类
数据类型 : 说明了数据类型的概念和并举例种类
变量: 分批次的介绍了变量的不同类型并进行初步的理解
而在本篇文章中主要内容还是围绕着数据类型之间的转化再讲解呢
目录
类型转化
类型提升
字符串类型
一. 类型转换
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); // 整型默认情况下是int System.out.println(3.14); // 浮点型默认情况下是double int 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; // 编译失败:类型不兼容 }}
是的,当我们需要把 大的类型 转化为 小的类型 时,就需要 赋值
我们就牵扯到了 强制类型转化
鱼式疯言
不同数字类型的变量之间 赋值 , 表示 范围更小的类型能隐式转换成 范围较大 的类型 如果需要把范围大
的类型赋值给 范围小
的, 需要强制类型转换, 但是 可能精度丢失
将一个 字面值常量 进行赋值的时候, Java
会自动针对数字范围进行 检查 强制类型转换不一定能成功,不相干的类型 不能 互相转换 最后小编还想说
小的数据类型 是可以自动放在大的数据类型的,但当我们强制 大的数据类型
时,是很有可能造成 一部分数据存储不下 ,造成 数据的丢失
的
二. 类型提升
不同类型的数据之间相互 运算
时,数据 类型小 的会被提升到数据 类型大 的。
1. int
与 long
之间
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 赋值给long System.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); }}
结论: byte
和 byte
都是 相同类型 , 但是出现 编译报错
. 原因是,
虽然 a
和 b
都是 byte
, 但是计算 a + b 会先将 a 和 b
都提升成 int
, 再进行计算, 得到的结果也是 int 这是赋给 c, 就会出现上述错误.
由于计算机的 CPU
通常是按照 4
个字节为单位从内存中 读写数据 . 为了硬件上实现方便,
诸如 byte
和 short
这种低于 4
个字节的类型, 会先提升成 int
, 再参与计算. ? ? ?
鱼式疯言
不同类型 的数据混合运算,范围小
的会提升成 范围大
的对于 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)); // 方法1 String str1 = num + ""; // 方法2 String str2 = String.valueOf(num); System.out.println("转化之后 num+1="+(str2+1)); System.out.println("转化之后 num+1="+(str1+1)); }}
是的,我们可以通过 两种方法
转为 字符串
鱼式疯言
直接带双引号
会 向上转化
为字符串 String str1 = num + "";
使用 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)
本节对只是对 字符串
进行简单的介绍,大家能够正常使用即可
后序会详细给小伙伴们介绍哦 ? ? ?
总结
类型转化: 我们认识了赋值时的类型转化并熟悉了两种不同的类型的转化方式
类型提升: 在运算时,注意也会发生的类型提升的理解
字符串类型: 理解的一种新的类型并明白字符串和其他类型的转化方式
可谓收获颇丰啊 ? ? ? ?
如果觉得小编写的还不错的咱可支持 三连 下 ==(定有回访哦) == , 不妥当的咱请评论区 指正
希望我的文章能给各位宝子们带来哪怕一点点的收获
就是 小编 创作 的最大 动力 ? ? ?