例题1:

给出如下一段代码,判断会输出什么

1
2
3
4
5
6
7
8
9
10
11
12
13
public class Second {
public static void main(String[] args)
{

byte a = 1;
byte b = 1;
byte c = a + b; /*1*/
byte d = (byte)a + (byte)b; /*2*/
System.out.println(c);
System.out.println(d);

}
}

结果:

其实,这里什么都不会输出,并且会报错

原因分析:

这里有一条规律,JAVA中 int以及int以下的类型进行运算,结果是int类型,这个程序中,注释标为1和2的地方都是byte类型经过加法运算,所以最终结果是int类型,而且int转byte是不可以自动转换的,需要进行强制转换

总结一下:

  1. int及int以下的类型,经过运算结果仍为intl类型
  2. JAVA是一种强类型语言,大类型转小类型强转,小转大自动转

例题2:

给出如下一段代码,判断会输出什么

1
2
3
4
5
6
7
8
9
public class Test{
public static void main(String[] args)
{
short s = 10;
short s2 = 20;
char ch = s + s2;
System.out.println(ch);
}
}

结果:

这里会报错

原因分析:

首先要明确,int 与 char[^footnote]:是无法转换的,而且char类型取值范围与int无大小之分,因此这里会报错

总结一下:

  • 没有大小之分的数据类型,通过转换,精度出现损失的时候,需要进行强转
  • char的取值范围从0开始,而其他6个基本数值型则从负数开始

例题3:

给出如下一段代码,判断会输出什么

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Second {
public static void main(String[] args)
{


byte b = 10;
short s = b;
System.out.println(s);

byte b2 = s;
System.out.println(b2);



}
}

结果:

依然会报错

原因分析:

short类型转换为byte需要进行强制转换,因为会有精度损失


例题4:

给出如下一段代码,判断会输出什么

1
2
3
4
5
6
7
8
public class Second {
public static void main(String[] args)
{
byte b = -10;
char ch = b;
System.out.println(ch);
}
}

结果:

报错

原因:

byte与char无大小之分,需要进行强转


例题5

给出如下一段代码,判断会输出什么

1
2
3
4
5
6
7
8
9
10
11
public class Second {
public static void main(String[] args)
{


short s = 10;
char ch = (char)s;
System.out.println(ch + 1 - 1 );

}
}

结果:

程序可以正常运行,因为自己在写的时候特意加上了(char)

原因分析:

因为short 类型是有符号的,而char类型是无符号的,因此尽管char类型与short类型字节数相同,但是在这里还是不能进行强转的

问题来了:为什么输出的时候ch + 1 - 1就会输出一个数字呢(直接用ch输出看不到效果,因为输出的是字符)


例题6

给出如下一段代码,判断会输出什么

1
2
3
4
5
6
7
8
9
public class Second
public static void main(String[] args)
{
long l = 100;
float f = l;
System.out.println(f);

}
}

结果:

正常输出 100.0

原因分析:

JAVA数据类型中,虽然long比float的字节数多,但是他们表示的方法不同,long采用的是二进制,而float采用的是科学计数法,因此float虽然字节数少,但是范围较long还要大些


例题7

给出如下一段代码,判断会输出什么

1
2
3
4
5
6
7
public class Second {
public static void main(String[] args)
{
float f = 10.0f/0;
System.out.println(f);
}
}

结果:

infinity

原因:

这里进行计算的时候,将0转换成0.0,因此结果是Infinity


例题8

给出如下一段代码,判断会输出什么

1
2
3
4
5
6
7
8
9
public class Second {
public static void main(String[] args)
{
long a = 10;
int b = 20;
int c = a + b;
System.out.println(c);
}
}

结果:

报错

原因分析:

int 与 int以上的类型进行运算,结果仍为大类型


总结:关于数据类型的注意事项,上面一些题目,都需要注意