基本数据类型
Java 是一种强类型的语言,声明变量时必须指明数据类型。变量(variable)的值占据一定的内存空间。不同类型的变量占据不同的大小。
Java中共有8种基本数据类型,包括4 种整型、2 种浮点型、1 种字符型、1 种布尔型,请见下表。
Java基本数据类型
数据类型 | 说明 | 所占内存 | 举例 | 备注 |
byte | 字节型 | 1 byte | 3,127 | |
short | 短整型 | 2 bytes | 3,32767 | |
int | 整型 | 4 bytes | 3,21474836 | |
long | 长整型 | 8 bytes | 3L,92233720368L | long最后要有一个L字母(大小写无所谓) |
float | 单精度浮点型 | 4 bytes | 1.2F, 223.56F | float最后最好有一个F字母(大小写无所谓)。 |
double | 双精度浮点型 | 8 bytes | 1.2, 1.2D, 223.56, 223.56D |
double最后最好有一个D字母(大小写无所谓)。 |
char | 字符型 | 2 bytes | ‘a‘,‘A‘ | 字符型数据只能是一个字符,由单引号包围。 |
boolean | 布尔型 | 1 bit | true, false |
Java中的数值类型不存在无符号的,它们的取值范围是固定的,不会随着机器硬件环境或者操作系统的改变而改变。实际上, Java中还存在另外一种基本类型void,它也有对应的包装类 java.lang.Void,不过我们无法直接对它们进行操作。对于数值类型的基本类型的取值范围,我们无需强制去记忆,因为它们的值都已经以常量的形式定义在对应的包装类中了。请看下面的例子:
public class PrimitiveTypeTest { public static void main(String[] args) { // byte System.out.println("基本类型:byte 二进制位数:" + Byte.SIZE); System.out.println("包装类:java.lang.Byte"); System.out.println("最小值:Byte.MIN_VALUE=" + Byte.MIN_VALUE); System.out.println("最大值:Byte.MAX_VALUE=" + Byte.MAX_VALUE); System.out.println(); // short System.out.println("基本类型:short 二进制位数:" + Short.SIZE); System.out.println("包装类:java.lang.Short"); System.out.println("最小值:Short.MIN_VALUE=" + Short.MIN_VALUE); System.out.println("最大值:Short.MAX_VALUE=" + Short.MAX_VALUE); System.out.println(); // int System.out.println("基本类型:int 二进制位数:" + Integer.SIZE); System.out.println("包装类:java.lang.Integer"); System.out.println("最小值:Integer.MIN_VALUE=" + Integer.MIN_VALUE); System.out.println("最大值:Integer.MAX_VALUE=" + Integer.MAX_VALUE); System.out.println(); // long System.out.println("基本类型:long 二进制位数:" + Long.SIZE); System.out.println("包装类:java.lang.Long"); System.out.println("最小值:Long.MIN_VALUE=" + Long.MIN_VALUE); System.out.println("最大值:Long.MAX_VALUE=" + Long.MAX_VALUE); System.out.println(); // float System.out.println("基本类型:float 二进制位数:" + Float.SIZE); System.out.println("包装类:java.lang.Float"); System.out.println("最小值:Float.MIN_VALUE=" + Float.MIN_VALUE); System.out.println("最大值:Float.MAX_VALUE=" + Float.MAX_VALUE); System.out.println(); // double System.out.println("基本类型:double 二进制位数:" + Double.SIZE); System.out.println("包装类:java.lang.Double"); System.out.println("最小值:Double.MIN_VALUE=" + Double.MIN_VALUE); System.out.println("最大值:Double.MAX_VALUE=" + Double.MAX_VALUE); System.out.println(); // char System.out.println("基本类型:char 二进制位数:" + Character.SIZE); System.out.println("包装类:java.lang.Character"); // 以数值形式而不是字符形式将Character.MIN_VALUE输出到控制台 System.out.println("最小值:Character.MIN_VALUE=" + (int) Character.MIN_VALUE); // 以数值形式而不是字符形式将Character.MAX_VALUE输出到控制台 System.out.println("最大值:Character.MAX_VALUE=" + (int) Character.MAX_VALUE); } }
整数型
整数型包括byte、short、int和long。
public class Demo1 { public static void main(String[] args) { //字面值 默认是int类型 byte n1 = 12; short n2 = 45; int n3 = 456; long n4 = 67L;// L 或 l } }
二进制太长可以使用下划线来进行区分
public class Demo1 { public static void main(String[] args) {
int n5 = 0B1010_1111_0011_1100;//二进制用0B或0b表示
int n6 = 017;//八进制用0表示
int n7 = 0xffff;//十六进制用0x或0X表示
long n8 = 12345678987654321L;
} }
浮点型
浮点型包括double和float。
注意:1.不要在数量级相差很大的浮点类型之间进行运算。2.避免进行等量的判断
import java.math.*; public class Demo1 { public static void main(String[] args) { float f1 = 34.5f;//f 或 F 默认为 double类型 double d1 = 456.78d;//后缀 d 或 D double d2 = 2.4e20;// e或 E 以 10为底 //浮点型可以表示十六进制,但是必须以科学 //计数法表示,而且 以 p为底 double d3 = 0x3.4p20;// p或 P以2 double d4 = 2.4e20; double d5 = d4 + 1; double num1 = 0.1; double num2 = 0.2; double num3 = num1 + num2;//0.3 //java.lang System.out.println(num3 == 0.3);//不一样 输出结果false System.out.println(num3);//输出结果 0.30000000000000004 //处理 java.math包 BigDecimal number1 = new BigDecimal("0.1"); BigDecimal number2 = new BigDecimal("0.2"); System.out.println(number1.add(number2));//输出结果 0.3 } }
字符型
char类型
- char类型是一个单一的 16 位 Unicode 字符;
- 最小值是 \u0000(即为0);
- 最大值是 \uffff(即为65,535);
- char 数据类型可以储存任何字符;
- 例子:char letter = ‘A‘;。
只能存储一个字符,只能使用单引号
布尔型
布尔(boolean)型包括true和false
引用数据类型
String
public class Demo2 { public static void main(String[] args) { String name = "郭靖"; String address = "北京"; //+ 连接字符串 System.out.println(name+address); int n1 = 1; int n2 = 1; System.out.println(n1 + n2);//输出结果:2 // 2 +"郭靖"-》 “2郭靖” System.out.println(n1+n2+name);//输出结果:2郭靖 //"郭靖1"+n2 ->"郭靖11“ System.out.println(name+n1+n2);//输出结果:郭靖11 } }
基本数据类型转换
自动类型转换
小-》 大
低-》 高
强制类型转换
大-》小
高-》低
语法格式为:(强制转换的数据类型)操作数
int num = (int)45.67;
类型提升原则
前提:运算
结果:采取高类型(范围大的数据类型作为结果)
运算符
分类:根据操作数的个数
一元
二元
三元
算数运算符
public class Demo5 { public static void main(String[] args) { System.out.println(5 + 2);//输出结果:7 System.out.println(5 - 2);//输出结果:3 System.out.println(5 * 2);//输出结果:10 //------------除法-------------------------- //除数和被除数都是整数结果会取整数部分 System.out.println(5 / 2);////输出结果:2 System.out.println(5.0 / 2);//输出结果:2.5 System.out.println(5 / 2.0);//输出结果:2.5 System.out.println(5.0 / 2.0);//输出结果:2.5 //除数为0 抛出异常 //System.out.println(5 / 0); System.out.println(5.0 / 0);//正无穷大 输出结果:Infinity System.out.println(-5.0 / 0);//负无穷大 输出结果:-Infinity //非数字NaN System.out.println(0.0 / 0);//输出结果:NaN //-----------------取余数,取模---------------------------- System.out.println( 5 % 2);//输出结果:1 System.out.println(5.0 % 2);//输出结果:1.0 System.out.println(5 % -2);//输出结果: 1 System.out.println(-5 % 2);//输出结果:-1,符号看被除数 //---------------习题讲解-------------------------------- /*根据天数(46)计算周数和剩余的天数*/ int days = 46; int week = days / 7;//周 int day = days % 7;//余数天 System.out.println(week+"周,余数"+day+"天"); //---------------------------------------------- /* 对于随意输入的一个3位数, 反转;例如:234反转后 (将每一个数字反转输出即可):432 */ int num = 234; int n1,n2,n3; n1 = num % 10;//个位 n2 = num / 10 % 10;//十位 n3 = num / 100;//百位 System.out.println(n1+""+n2+""+n3);//"432" System.out.println(n1*100+n2*10+n3);//432 } }
关系运算符
逻辑运算符
&& || 短路与和短路或
位运算符
& | 非短路与和非短路或
5 二进制 00000000-00000000-00000000-00000101 2 二进制 00000000-00000000-00000000-00000010 //&如果相对应位都是1,则结果为1,否则为0 5&2 二进制 00000000-00000000-00000000-00000000 //|如果相对应位都是0,则结果为0,否则为1 5|2 二进制 00000000-00000000-00000000-00000111 //^如果相对应位值相同,则结果为0,否则为1 5^2 二进制 00000000-00000000-00000000-00000000 //~按位补运算符翻转操作数的每一位,即0变成1,1变成0。 ~5 二进制 11111111-11111111-11111111-11111010 减一 11111111-11111111-11111111-11111001 取反 00000000-00000000-00000000-00000110 //<<向左移动几位,右边低端位用0补全 5<<2 二进制 00000000-00000000-00000000-00010100 //>>向右移动几位,左边高位是什么用什么补位,是1用1,是0用0 5>>2 二进制 00000000-00000000-00000000-00000001 //>>>无符号右移,左边高位全部用0进行补位 5>>>2二进制 00000000-00000000-00000000-00000001 -6>>>2二进制 00111111-11111111-11111111-11111110
扩展赋值运算符
条件运算符
语法:
比较运算||Boolean?表达式1:表达式2
如果?前的结果是true返回表达式1,如果?前返回false返回表达式2
运算符的优先级