--- title: Java SE笔记: 数据类型和常量(字面量)和变量 date: 2016-07-12 21:50:00 updated: 2016-07-12 21:50:00 description: "数据类型和常量(字面量)和变量" categories: [个人笔记] tags: [Java, Java SE笔记] --- ## 数据类型 在java中 的数据类型分为两类数据类型 - 基本数据类型(8种) - 整数:byte short int long - 小数: float double - 布尔: boolean - 字符: char - 引用数据类型 - 字符串: String ### 整数 |类型 |占用内存 | 范围 |-----------------|----------------------|--------------------------------------------------------------------- |byte(字节) |8位(bit) |2^8=256,-128~127 1111 1111~0111 1111 |short(短整型) |16bit |2^16 = 65536 **~0111 1111 1111 1111 |int(整型) |32bit |超出20亿 **~0111 1111 1111 1111 1111 1111 1111 1111 |long(长整型) |64bit |2^64 **~* > **注意:** > - 如果一个整数没有加上任何的标识的时候,那么默认是int类型的数据。 > - 如果需要把该数据表示成一个long类型的数据,那么需要加数据后面加上L表示,L是不区分大小写的,但是建议使用大写。 > > **疑惑:** > 存储整数可以使用四种数据类型,那么具体怎么选择使用呢? > 选用数据类型的原则: 在能满足需求的情况下,能小就小。节省内存空间。 ### 小数(浮点数) 小数的数据类型: |类型 |占用内存 |-------------------|-------- |float(单精度浮点型) |32bit |double(双精度浮点型) |64bit > **注意:** >如果一个小数没有加上任何标识的时候,那么该小数默认是double类型的数据,如果需要表示成float类型,那么需要在小数的后面加上f表示。f不区分大小写的。 >`float数据类型不精确的问题:因小树部分转换为二进制时采用乘二取余法,所以小树部分不精确!` ### 布尔类型 布尔类型只有两个值:true或者false。 boolean:1字节或者4个字节 如果使用boolean声明一个基本类型的变量时,那么该变量占4个字节, 如果使用boolean声明一个数组类型 的时候,那么每个数组的元素占 一个字节。 ### 字符类型: char 2字节(16bit) 字符串的数据类型是:String 引用数据类型,不属于基本数据类型。 ## 常量(字面量) ## 变量 变量:变量就是在程序运行过程中其值可以发生变化的量,变量就是一个存储数据的容器。 ### 容器具备什么特点: - 容量(大小)。 - 存储一定格式的数据。 - 名字. ### 声明(定义)一个变量的格式: 数据类型 变量名字 = 数据值; ### 变量名的命名规范 首单词小写,其他单词首字母大写,其他小写。 ### java表示一个变量的容量多大是使用了数据类型描述的。 ### 注意: - 变量是必须先声明再使用。 - 在一个作用域中不能声明同名 的变量。 ## 数据类型转换 ### 数据类型转换: - 小数据类型-------->大数据类型 自动类型转换 - 大数据类型--------->小数据类型 强制类型转换 ### 强制类型转换的格式: 小数据类型 变量名 = (小数据类型)大数据类型; ### 数据类型转换要注意的细节: - 凡是byte、short 、 char数据类型数据在运算的时候都会自动转换成int类型的数据再运算。(包括赋值运算!) - 两个不同数据类型的数据在运算的时候,结果取决于大的数据类型。 - char类型的一个字符可以看做无符号的short类型的数! ```java class Demo{ public static void main(String[] args){ /* System.out.println(12); //整数常量 System.out.println(3.14); //小数常量 System.out.println(false); //布尔常量 System.out.println('1'); //字符常量 System.out.println("hello world"); //字符串常量 如果一个数据没有加上任何的标识之前,默认就是十进制的数据。 */ System.out.println(10);// 十进制 System.out.println(0b10); //二进制 , 如果一个数据要表示二进制,那么要在该数据的前面加上0b开头。 System.out.println(010); //八进制数据, 八进制的数据需要以0开头 System.out.println(0x10); //十六进制数据, 十六进制的数据需要以0x开头 } } ``` ```java class Demo5 { public static void main(String[] args) { //需求1: 定义一个变量存储一个正常人的年龄。 byte age = 120; //声明了一个byte类型的变量,该变量的名字叫age,把120存储到了age变量中。 //改变变量的值 age = 121; //需求2: 定义一个变量存储老师口袋钱。 short money = 128; //需求3: 定义一个变量存储老黎的钱。 int bossMoney = 1000000000; //需求4: 定义一个变量存储周小川老板 long allMoney = 10000000000000000L; //存储小数 float f = 3.14f; double d = 3.1415926537; boolean b = false; char c = 'a'; String str = "hello world"; System.out.println(str); //需要获取一个变量存储的数据,只需要使用变量名即可。 } } ``` ```java class Demo { public static void main(String[] args) { //int age = 12; //声明一个变量 int age ,height ; //声明了变量 //给变量赋值 age = 10; height = 175; System.out.println(age); System.out.println(height); } } ``` ```java class Demo1 { public static void main(String[] args) { String str = ""; //字符串还是字符呢? ""字符串没有内容是属于一个空字符串。 System.out.println(str); } } ``` ```java class Demo2 { public static void main(String[] args) { /* byte b= 11; // 一个字节 short s = b; // 把b变量存储的值赋予给s变量。 int i = s; // i是4字节 long l = i; // l 是8个字节。 System.out.println(l); int i = 128; //4个字节 byte b =(byte) i; // 1个字节 System.out.println(b); // -128 //如果是负数,那么最高位肯定是1, 正数的二进制位的最高位是0。 System.out.println(Integer.toBinaryString(-7)); //sun给我们提供一个功能 Integer.tobinaryString() 查看一个数据的二进制数据形式的。 // 11111001(补码) 凡是byte、short 、 char数据类型数据在运算的时候都会自动转换成int类型的数据再运算。 byte b1 =1; byte b2 = 2; byte b3 = (byte)(b1+b2); System.out.println(b3); //3 System.out.println('a'+1); //98 两个不同数据类型的数据在运算的时候,结果取决于大的数据类型 int i =10; long l = 20; i = (int)(i+l); System.out.println(i); */ int i = 10; // byte b = i; // 一个整数没有加上任何标识的时候,默认是int类型的数据。 //10 是一个常量, 编译器在编译的时候就能够确认常量的值了,byte b = 10,在编译到的时候 //java编译器就会检查到10并没有超出byte的表示范围,所以允许赋值。 //java编译器在编译的时候并不能确认变量所存储的值,变量存储的值是在运行的时候才在内存中分配空间的 System.out.println(b); } } ```