5、Java基本数据类型一、基本类型不牵扯内存分配问题,4类8种:
(1)整型:int、short、long、byte。 默认值0
(2)浮点型:float、double。 默认值0.0
(3)字符型:char。 默认值’\u0000’
(4)布尔型:boolean。 默认值false
二、引用类型需要开发者为其分配空间
引用类型包括类、接口、枚举和数组类型、null类型。
空引用null只能被被转化为引用类型,不能转化成基本类型,因此,不能把一个null值赋给基本类型的变量。
备注:
(1) 字符串类型是一个类,即引用类型 (2) 选择原则 a) 如果要表示整数就使用int,表示小数就使用double; b) 如果要描述日期时间数字或者表示文件(或内存)大小用long; c) 如果要实现内容传递或者编码转换使用byte; d) 如果要实现逻辑的控制,可以使用booleam; e) 如果要使用中文,使用char避免中文乱码; f) 如果按照保存范围:byte < int < long < double;
三、整型1、整型变换新建类Integral.java,整型*整型结果还是整型,运行程序
public class Integral {
/**
*整型
*@param args
*/
public static void main(String[] args) {
//2是一个整数(不会改变的量,称之为常量)
//程序中任何一个整数对应的类型都是int
int num = 2; //声明一个int型变量
//num是int型的变量,num*2是int型的常量,也是int型
System.out.println(num * 2);
}
}
结果输出
略
结果还是int类型。
2、整型数据溢出 编辑类Integral.java,数据在最大值+1和最小值-1。运行程序
public classIntegral {
/** * 整型 * * @param args */ publicstatic voidmain(String[] args) { intmaxValue = Integer.MAX_VALUE; // 取得最大值 intminVlaue = Integer.MIN_VALUE; // 取得最小值 System.out.println(maxValue); System.out.println(minVlaue); // maxVlaue属于整型,int变量 + int型常量 = int型 System.out.println(maxValue+1); System.out.println(minVlaue-1); } } 结果输出
略 结果最大值+1等于最小值了,最小值-1等于最大值。形成了一个循环
3、解决整型数据溢出 唯一解决方案就是用long类型,将maxValue的值赋值给long类型,编辑类Integral.java,运行程序
public class Integral{ /** * 整型 * * @param args */ publicstatic voidmain(String[] args) { intmaxValue = Integer.MAX_VALUE; // 取得最大值 intminVlaue = Integer.MIN_VALUE; // 取得最小值 // 程序的执行,都是由等号的右边到左边,这样计算是将maxVlaue的值+1之后,把结果赋值给result,结果还是为最小值 long result1 = maxValue + 1; System.out.println(result1); // 方法一:将maxValue强制转换为long之后进行运算,long类型 + int类型常量 = long类型 long result2 = (long)maxValue + 1; System.out.println(result2); // 方法二:先将maxValue的值赋值给resultValue之后,结果就是long类型,再+1,就是maxValue+1的值了,就不是最小值了 long result3 = maxValue; System.out.println(result3 + 1); } } 结果输出
略 这样,整型的数据溢出就不存在了。
4、大类型转小类型 定义一个long类型的数据,用来转换为int类型,编辑类类Integral.java,运行程序
public class Integral{ /** * 整型 * * @param args */ publicstatic voidmain(String[] args) { // 任何的整数其默认的类型都是int,如果该整数的值超过了int类型可以保存的数据范围, // 需要将这个数据明确的表示为long类型,在数据后面加一个“l”或“L”,推荐使用L longl = 2147483648L; int result = (int) l; //大的类型变小的类型,必须强制转换 System.out.println(result); } } 结果输出
略 因为表示的最大值+1了,所以输出最小值了。
5、数据类型默认值 所有的数据类型都有默认值,但是在主方法中,默认值无效,必须赋值。赋值可以在定义的时候,也可以在使用之前赋值。在使用前赋值,在老版本的JDK中也是会出错,所以最保险的做法是在声明变量的时候,直接赋值。编辑类类Integral.java,运行程序
public class Integral{ /** * 整型 * * @param args */ publicstatic voidmain(String[] args) { int num;// 定义一个int类型的变量 num = 10;// 在输出之前进行赋值 System.out.println(num);// 在低版本的JDK中,可能会出错 int i = 20;// 定义一个值为20的int类型的变量,推荐这样使用默认值 System.out.println(i); } } 结果输出
略
6、byte数据类型 范围在保存的数据范围-128-127之间,编辑类类Integral.java,运行程序
public class Integral{ /** * 整型 * * @param args */ publicstatic voidmain(String[] args) { // 10是int,int范围要大于byte,那么理论上需要进行强制转换;这里不需要,因为其数据量服务byte的要求 byte b = 10;// 10是int类型,在byte范围内 System.out.println(b); byte b2 = (byte) 128;//b2赋值内容大于127,+1的话,变为最小值
System.out.println(b2); int i = 10; // 10在int范围内 byte b3 = (byte) i; // 需要强制转换, System.out.println(b3); } } 结果输出
略
如果赋值的byte的范围,就需要进行强制转换。如果将int值赋值给byte,那么要求只能够是int常量,不能是int变量。如果需要,则需将byte强制转换为int类型。
四、浮点型 如果需要表示小数,则需要使用浮点型。默认类型是double类型。新建类FloatType.java,编辑类FloatType.java,运行base方法
public classFloatType { /** * 浮点型 * * @param args */ publicstatic voidmain(String[] args) { base();// 运行base方法
} private static void base() { double d = 5.2; // 这是一个小数,默认类型为double // d是double类型 * int类型常量 = double类型 // num* 2.0(由int类型变为double类型) System.out.println(d * 2); } } 结果输出
略 double类型保存的数字范围是最大的,能保存最大的有意义的数字。如果不能确定你需要保存的数字范围,可以选择使用double。也可以使用float表示小数,其范围要小于double,且默认的是double,所以如果要直接声明float变量,可以在数字后加一个“F”或“f”。新建方法floatBase();运行程序
privatestatic voidfloatBase() {
floatf1 = 1.5f; // float类型 * int类型常量 = float类型 System.out.println(f1 * 2); System.out.println(f1 * f1); System.out.println(1.1* 1.1); //传统BUG } 结果输出
略
这个bug一直存在,可以保留两位小数即可。
Int类型的计算,有时会存在小数,新建方法intCalculation(),运行程序
private staticvoid intCalculation() { int i1 =20; int i2 = 6; // int类型 / int类型 = int类型 System.out.println(i1/ i2); // 如果需要准确的计算,那么至少保证一个类型是double或者是float类型 System.out.println((double)i1 / i2); } 结果输出
略
Java进行除法计算的时候,都需要注意数据类型。
五、字符型 在项目中,用概念比较多,真正使用到的情况比较少。使用char进行表示,用单引号来声明变量的内容,而且字符型可以和int类型进行相互转换。新建方法charBase(),运行程序
public class CharType{ /** * 字符型 * * @param args */ publicstatic voidmain(String[] args) { charBase(); } /** * 字符型的定义 */ private static void charBase() { char c = 'A'; // 定义一个char类型 System.out.println(c); int i = c;// 将char赋值给int类型 System.out.println(i); } } 结果输出
略
常用范围
大写字母 A-Z (65<A> - 90<Z>)
小写字母 a-z (97<a> - 122<z>)
字符数字 0-9 (48<0> -57<9>)
中间相差32长度,实现大写字母和小写字母之间的相互转换。字符0和数字0是两个概念。新建方法charChange(),运行程序
privatestatic voidcharChange() {
charc = 'A' +32;// 将A转换为a System.out.println(c); charc2 = '0'; // 字符变量 + int常量 = int类型 int i = c2; // 将字符变为int类型 System.out.println(i); // 需要将int类型的内容转换为char类型,强制转化即可 charc3 = (char)i;// 强制转换 System.out.println(c3); } 结果输出
略
所以字符0等于整型的48。各种语言都有相似的编码,称之为ASCII码,Java中使用的是UNICODE编码,UNICODE所包含ASCII码,可以保存任何的文字信息,包括中文。新建方法charUnicode(),运行程序
privatestatic voidcharUnicode() {
char c = '彭';// 定义一个字符 int i = c;// 将字符转换为int类型 System.out.println(i); } 结果输出
略
所以在Java中中文‘彭’字存放的数字表示为24429。
六、布尔型 布尔是一位数学家的名字,发明了两个单词,true和false,用来表示计算的逻辑结果。条件满足返回true,条件冲突返回false,新建类BooleanType.class,运行程序
public classBooleanType { publicstatic voidmain(String[] args) { booleanBase(); } /** * 基本介绍 */ privatestatic voidbooleanBase() { booleanb1 = 10 > 2; //true 表示条件满足 boolean b2 = 10 < 2;// false 表示条件不满足 if(b1) { System.out.println("Hello enlern"); } } } 结构输出
略
在其他语言中,如果没有boolean类型,就用数字表示,比如0表示false,1表示true。
七、字符串 char只能表示单一字符,但是多个字符就需要String来表示。String并不是基本类型,是一个引用数据类型。但是它可以按照基本类型的使用模式。String上可以使用“+”,作用是表示两个字符串的连接。新建类StringType.java,运行程序
public classStringType { /** * 字符串String * * @param args */ publicstatic voidmain(String[] args) { baseString(); } /** * 基本概念 */ privatestatic voidbaseString() { String s1= "shanghai"; // 定义一个字符串 String s2= "enlern";// 定义一个字符串 System.out.println(s1 + s2); } } 结果输出
略
如果既有字符串相加,也有数字相加,新建方法stringSum(),运行程序
/**
*字符串相加,数字相加 */ private static void stringSum() { int i1 = 10;// 定义一个int类型 int i2 = 4;// 定一个int类型 System.out.println("sum = " + i1+ i2); } 结果输出
略
此时不是数学计算,是字符串相加了。一旦基本类型与String相加操作,都会变成String字符串的拼接。如果要表示数字想“+”的话,可以使用括号解决。在字符串相加中有几个特殊的字符,为转义字符。如下
\\反斜杠
\t 间隔 ('\u0009')
\n 换行 ('\u000A')
\r 回车 ('\u000D')
新建stringSymbol(),运行程序
/**
*转义字符 */ private staticvoid stringSymbol() { System.out.println("熊孩子\n\"用脚猛蹬电梯门\"下一秒门爆裂冒出巨大白烟"); } 结果输出 略
可以使用转移字符对字符串进行格式化。
|