Java学习篇4

    技术2024-08-08  73

    上一篇博客:常量、变量、数据类型


    目录

    数据类型的转换

    隐式(自动)类型转换强制类型转换注意事项

    ASCII编码

    ASCII码表Unicode码表

    开始

    一、数据类型的转换

    Java程序中要求参与的计算的数据,必须要保证数据类型的一致性,如果数据类型不一致将发生类型的转换。

    1. 自动转换

    自动转换:将 取值范围小的类型 自动提升为 取值范围大的类型 。

    public static void main(String[] args) { int i = 1; byte b = 2; // byte x = b + i; // 报错 //可以在不溢出的情况下 byte x = (byte) (b + i); //int类型和byte类型运算,结果是int类型 int j = b + i; System.out.println(j); } public static void main(String[] args) { int i = 1; double d = 2.5; //int类型和double类型运算,结果是double类型 //int类型会提升为double类型 double e = d+i; System.out.println(e); }

    范围小的类型向范围大的类型提升, byte、short、char 运算时直接提升为 int

    byte、short、char-- >int-- >long-- >float -->double

    字符加上数字会利用ASCII码转化后在数值相加

    2. 强制转换

    将 1.5 赋值到 int 类型变量会发生什么?产生编译失败,肯定无法赋值。

    double 类型内存8个字节, int 类型内存4个字节。 1.5 是 double 类型,取值范围大于 int 。

    可以理解为double 是8 升的水壶, int 是4升的水壶,不能把大水壶中的水直接放进小水壶去。 想要赋值成功,只有通过强制类型转换,将double 类型强制转换成 int 类型才能赋值。

    强制类型转换:将 取值范围大的类型 强制转换成 取值范围小的类型 。 比较而言,自动转换是Java自动执行的,而强制转换需要我们自己手动执行。

    转换格式:

    数据类型 变量名 = (数据类型)被转数据值; int i = (int) 1.56; public static void main(String[] args) { //short类型变量,内存中2个字节 short s = 1; /* 出现编译失败 s和1做运算的时候,1是int类型,s会被提升为int类型 s+1后的结果是int类型,将结果在赋值会short类型时发生错误 short内存2个字节,int类型4个字节 必须将int强制转成short才能完成赋值 */ s = s + 1//编译失败 s = (short)(s+1);//编译成功 }

    转换原理

    注意事项

    浮点转成整数,直接取消小数点,可能造成数据损失精度。 int a = (int) 1.9;//a = 1,并不是四舍五入

    int 强制转成 short 砍掉2个字节,可能造成数据丢失。 // 定义s为short范围内最大值 short s = 32767; // 运算后,强制转换,砍掉2个字节后会出现不确定的结果 s = (short)(s + 10);

    ASCII编码

    ASCII码

    public static void main(String[] args) { //字符类型变量 char c = 'a'; int i = 1; //字符类型和int类型计算 System.out.println(c+i);//输出结果是98 }

    计算机中只存储二进制0和1

    所有的信息包括数字、字符,字母,汉字、图片、视频等等,都是二进制存储

    因此引入一个规则表:编码表

    编码表 :就是将人类的文字和一个十进制数进行对应起来组成一张表格。

    老外的语言只有英文字母,这张表只有128个就能够完全对应他们的语言

    但是像中国汉字、世界其他国家的汉字这些是远远不够的

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

    Unicode编码

    如果要表示中文,显然一个字节是不够的,至少需要两个字节,而且还不能和ASCII编码冲突,所以,中国制定了GB2312编码,用来把中文编进去。

    Unicode通常用两个字节表示一个字符,原有的英文编码从单字节变成双字节,只需要把高字节全部填为0就可以。

    public class bianma{ public static void main(String[] args){ char a = '中'; int b = a + 0; System.out.println(b);//输出20013 } }


    参考:B站黑马

    Processed: 0.011, SQL: 9