Java(六)数据类型之间的转换

67 阅读3分钟

Java是一门强语法类型语言,其中大概率会设置到不同数据类型的变量之间进行数据类型转换。关于数据类型转换,大概有一下两种方式:

一:强制类型转换

什么是隐式类型数据转换呢?就是大的数据类型被强制转换为小的数据类型。

我们能不使用强制转换,尽量不使用强制转换,转不好可能会出问题。

下面我们使用代码来举一个小例子:


/**

*  **@name** 主方法

*  **@param** args

*/

**public** **static** **void** main(String[] args)

{

**int** a = 130;

**byte** b = (**byte**)a;

System.***out***.println(b); // 输出-126

}

上边的代码最终输出-126。至于为什么输出的是-126,这个涉及到计算机底层的使用补码、反码、原码计算的知识,我这里不是很了解,后面再说。

 

二:隐式类型转换

什么是隐式类型数据转换呢?就是小的数据类型会自动提升为大的数据类型。

下面我们使用代码来举一个小例子:


/**

*  **@name** 主方法

*  **@param** args

*/

**public** **static** **void** main(String[] args)

{

**byte** b = 1;

**int** num = 1000;

**short** s = 20;

**long** l = 2L;

// 浮点数定义 数字后边必须加f,否则报错

**float** f = 3.1f;

**double** d = 3;

**double** result = b + num + s + l + f + d;

System.***out***.println(result);

}

我们可以看到,上边的算式中我们最后接受结果的变量的数据类型是double,上边其他类型,比如byte、short等都自动隐式转换成了double类型的数据。

 

三:关于类型转换常见的问题

1:下面的代码打印的结果是几?

/**
* @name 主方法
* @param args
*/
public static void main(String[] args)
{
byte a = 10;
byte b = 20;
byte c = a + b;
System.out.println(c);
}

第一次看到这个问题,我基本上没怎么想就回答30,但是将代码复制到eclipse中发现byte c = a + b;这一行报错。

后来一寻思,也对,我怎么知道两个byte类型的变量相加的值还是不是byte类型,报个错也是应该的。

解决方式很简单,我们将变量c的数据类型改成int即可。当然,使用强制类型转换也可以,但是不推荐。

 

2:下面的代码输出的结果是多少?

/**
* @name 主方法
* @param args
*/
public static void main(String[] args)
{
byte b = 126 + 1;
System.out.println(b);  // 127
}

这个就比较容易了,单纯的两个常量计算而已。

 

四:char类型变量的数据运算

在做这个之前,我们先来了解一下,什么是ASCII码。

ASCII码是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言。

ASCII对照表:

字体天下.png

下边我们在代码中测试一下:

/**
* @name 主方法
* @param args
*/
public static void main(String[] args)
{
int b = 'a' + 1;
System.out.println(b); // 输出98
}

上边的代码最终输出结果是98。这里没有什么难度,知道能这么用就可以了。

 

最后,有一点需要特别注意,boolean不能与其他数据类型进行转换。

 

有好的建议,请在下方输入你的评论。