1 目录及资源索引
2 练习1
题目:创建一个 Java 源文件,命名为 Exerc01.java 。在主函数当中创建一个 Boolean 类型的变量,并且尝试为这个变量赋值(true、false、0),并将这个变量的值打印出来。
代码如下:
public class Exerc01
{
public static void main(String args[])
{
boolean bTemp1 = true;
boolean bTemp2 = false;
boolean bTemp3 = 0;
System.out.println(bTemp1);
System.out.println(bTemp2);
System.out.println(bTemp3);
}
}
很显然,bTemp3 是不能这样赋值的,会有错误,编译如下:
把 0 改为 true,再次编译,可以通过
运行结果如下:
3 练习2
题目:创建一个 Java 源文件,命名为 Exerc02.java 。在主函数当中创建一个 char 类型的变量,并尝试为这个变量赋值(英文字符或中文字符),并将这个变量的值打印出来。
代码如下:
public class Exerc02
{
public static void main(String args[])
{
char cTemp1 = 'a';
char cTemp2 = 'b';
char cTemp3 = '你';
char cTemp4 = '好';
System.out.println(cTemp1);
System.out.println(cTemp2);
System.out.println(cTemp3);
System.out.println(cTemp4);
}
}
同样的,根据之前的经验,有汉字时,在编译命令后边要加上使用的字符集编码,编译运行结果如下:
3 练习3
题目:创建一个 Java 源文件,命名为 Exerc03.java 。在主函数为每一种数值型创建一个变量,并且赋值,然后进行各种加减乘除的运算。
3.1 测试代码1
测试代码1:
public class Exerc03
{
public static void main(String args[])
{
byte bTempA = 0;
short sTempB = 0;
int iTempC = 0;
long lTempD = 0;
float fTempE = 0.1;
double dTempF = 0;
}
}
上述代码,编译后,可以看到第9行有如下错误:
这是因为,再把 0.1 赋值给 fTempE 的时候,默认是 double 类型的,因此就会报如上错误,为了解决此问题,可以参考上节,定义一个 long 整形的变量,需要在后边加上一个大写的 L,这样才能代表是长整型。类比过来就是要在后边加上一个大写的F,修改后代码如下:
public class Exerc03
{
public static void main(String args[])
{
byte bTempA = 0;
short sTempB = 0;
int iTempC = 0;
long lTempD = 0;
float fTempE = 0.1F; // 后边加上大写的F
double dTempF = 0;
}
}
再次编译没有报错。
3.2 测试代码2
测试代码2如下:
public class Exerc03
{
public static void main(String args[])
{
byte bTempA = 0;
short sTempB = 0;
int iTempC = 0;
long lTempD = 1;
float fTempE = 0.1F; // 后边加上大写的F
double dTempF = 0;
iTempC = lTempD;
}
}
编译后的结果如下图所示,可以看到在最后一句赋值语句时,出现了问题,很显然,这样把一个长整型的数赋值给一个整形的,精度肯定是会损失的。
需要注意的是,0是整形,通常不能直接赋值给其他类型,但是 byte 和 short 两种类型除外。
3.3 测试代码3
测试代码3如下:
public class Exerc03
{
public static void main(String args[])
{
byte bTempA = 0;
short sTempB = 0;
int iTempC = 0;
long lTempD = 1;
float fTempE = 0.1F; // 后边加上大写的F
double dTempF = 0;
int iA1 = 0.5 * 10;
System.out.println(iA1);
}
}
编译结果如下,可以看到,报出了可能损失精度的错误,为什么呢?因为0.5是一个双精度浮点型,小数不论怎么计算,都是双精度浮点型。
整个表达式的计算结果是什么类型,取决于整个公式中最大的那个数的类型。
那如果就要这样写,又要避免错误怎么办,可以使用 强制类型转换,具体用法就是在想要转换的语句前边,用括号加上一个想要的类型,即可。代码体现如下:
public class Exerc03
{
public static void main(String args[])
{
byte bTempA = 0;
short sTempB = 0;
int iTempC = 0;
long lTempD = 1;
float fTempE = 0.1F; // 后边加上大写的F
double dTempF = 0;
int iA1 = (int)(0.5 * 10);
System.out.println(iA1);
}
}
可以看到,已经编译成功了。
在强制转换的时候,有一个地方需要注意,就是必须要在你想要转换的那个类型两端加上括号,后边的语句也要加上对应的括号,不然会报错。
3.4 测试代码4
测试代码4如下:
public class Exerc03
{
public static void main(String args[])
{
byte bTempA = 0;
short sTempB = 0;
int iTempC = 0;
long lTempD = 1;
float fTempE = 0.1F; // 后边加上大写的F
double dTempF = 0;
int iA1 = (int)(0.5 * 10);
System.out.println(iA1);
byte bA2 = (byte)(bTempA + 200);
System.out.println(bA2);
}
}
编译运行结果如下,可以看到,编译没有错误,但是运行结果怎么会是 -56 呢?
仔细想一下,byte 型取值范围是 -128 ~ 127,很明显,加上200后,超过了 byte 的取值范围,这样就会出现预想不到的错误,因此在使用强制转换的时候,需要慎重。
4 什么时候可以使用强制转换?
数值型类型表数范围关系:
byte < short < int < long < float < double
5 总结
- 在程序中有汉字字符时, 需要在编译命令后加上所使用的字符集;
- 0 通常是整形,不能随便赋值给其他类型变量,但是 byte 和 short 两种类型除外;
- 强制转换需要慎用;
- 由于文章纯手打,可能会有错误之处,望各位看到的时候可以及时提醒,我也及时改正,谢谢~