Java数据类型
来自CloudWiki
Java基本数据类型
- 变量就是申请内存来存储值。也就是说,当创建变量的时候,需要在内存中申请空间。
- 因此,通过定义不同类型的变量,可以在内存中储存整数、小数或者字符。
- Java 的两大数据类型:
基本数据类型 引用数据类型
基本数据类型
- 基本数据类型的数据占用内存的大小固定,在内存中存入的是数据本身。引用数据类型在内存中存入的是引用数据的存放地址,并不是数据对象本身。
思考:请问这句话中几个变量应该分别用什么数字类型来表示 ?(答对得2分,答错不得分,无响应扣2分)
商苑面馆进了 5袋面粉,每袋4.5公斤,产地为‘鲁’,厂址为:“济南市旅游路4516号”,是否本地产:是。
整数型
整数通常这样表示:
int a = 5;
在电脑内存为这个数分配4个字节,占32位,
int 能够表示的范围是:-2147483648(-2^31) ~ 2147483647(2^31-1)。
int是最常用的整数类型,因此在通常情况下,直接给出一个整数值默认就是int类型。
除此之外,还有以下3种:
byte two = 2; short a = 3276;long a = 10000;
通常所说的整数型,实际指的是如下四种类型:
- 字节型(byte):用关键字byte定义的整数型变量,内存分配1个字节,占8位(bit),表示的范围是:-128(-27)~ 127(27-1)。
- 短整型(short):用关键字short定义的整数型变量,内存分配2个字节,占16位,表示的范围是:-32768(-215) ~ 32767(215-1)。
- 长整型(long):用关键字long定义的整数型变量,内存分配8个字节,占64位。表示的范围是:(-263) ~ (263-1)。
练一练:商院面馆进了5袋面粉。
特殊情况
- int是最常用的整数类型,因此在通常情况下,直接给出一个整数值默认就是int类型。除此之外,有如下三种情况必须指出:
- 如果使用一个巨大的整数值(超出int类型的表示范围)时,Java不会自动把这个整数值当成long类型来处理。如果希望系统把一个整数值当成long类型来处理,应该在这个整数值后增加l或者L作为后缀。通常推荐使用L,因为英文字母l很容易跟数字1混淆。例如:
long la = 9876543234L; // 超出了int取值范围,必须加“L” long lb = 98765432L; // 未超出int取值范围,可以加“L” long lc = 98765432; // 未超出int取值范围,可以省略“L”
浮点型
float a = 1.2f;double a =1234567.89;
Java浮点型变量有如下两种类型:
- 单精度浮点数(float型):用关键字float定义的浮点型变量,内存分配4个字节,占32位。
- 双精度浮点数(double型):用关键字double定义的浮点型变量,内存分配8个字节,占64位。
- 在为float型常量或变量赋值时,需要在所赋值的后面加上一个字母“F”(或“f”),说明所赋的值为float型。如果所赋的值为整数,并且未超出int型的取值范围,也可以省略字母“F”(或“f”)。例如:
float fa = 9412.75F; // 赋值为小数,必须加“F” float fb = 9876543210F; // 赋值超出int取值范围,必须加“F” float fc = 9412F; // 未超出int取值范围,可以加 “F” float fd = 9412; // 未超出int取值范围,可以省略“F”
- Java语言的浮点类型默认是double类型,当然也可以通过在浮点数后添加d或D后缀,显示指定是double类型,但通常没有必要。
- 例如:double a =1234567.89D; //声明double型变量并赋值
- Java语言的浮点数有两种表示形式:
十进制数形式:这种形式就是简单的浮点数,例如5.12、512.0、0.512。浮点数必须包含一个小数点,否则会被当成int类型处理。 科学计数法形式:例如5.12E2(即5.12×102)。
- 必须指出的是,只有浮点类型的数值才可以使用科学计数法形式表示。例如,51200是一个int类型的值,但512E2则是浮点类型的值。
练一练:假设面粉每袋净重4.5公斤,用单精度怎么表示 ?用双精度怎么表示?
字符型
char sex = '男';
- Java语言使用16位的Unicode字符集作为编码方式,而Unicode被设计为支持世界上所有书面语言的字符,因此Java程序支持各种语言的字符。
- 字符型通常用于表示单个的字符。字符型用关键字char进行声明,占用2个字节的内存,字符型的取值必须使用单引号(')括起来。
- 字符型的取值有三种表示形式:
直接通过单个字符来指定字符型的取值,例如: 'A'、'9'、'我' 等。 通过转义字符表示特殊字符型的取值,例如:'\n'、'\r' 等。 直接使用Unicode值来表示字符型的取值,格式为“\uXXXX”,其中XXXX代表一个十六进制的整数。例如:'\u9999'表示“香”。
\’ 单引号 \u0027 \” 双引号 \u0022 \\ 反斜杠 \u005c \r 回车 \u000d \n 换行 \u000a \t 制表符 \u0009 \b 退格 \u0008
- 练一练:商院面粉的产地为'鲁'
布尔型
- 布尔型只有一种,用于表示逻辑上的“真”或“假”。在Java语言中,布尔型的数值只有true或false。
- 布尔型用关键字“boolean”进行声明。例如:
boolean b1 = true; // 声明boolean型变量b1,并赋值为true。 boolean b2 = false; // 声明boolean型变量b2,并赋值为false。
- 练一练:商院面馆的产地是否为本地
复合数据类型
- Java语言中除8种基本数据类型以外的数据类型被称为引用数据类型,也称复合数据类型。包括类引用、接口引用以及数组引用。在程序中声明的引用类型变量只是为该对象起一个名字,或者说是对该对象的引用,变量值是对象在内存空间的存储地址而不是对象本身,因此称为引用类型。
- 比如,字符串String就是引用数据类型。String是一个Java类,因此是一种类引用。
- 例如:String name = "Tom ";
- 此时name表示的内存中存放的并不是值“Tom”,而是值“Tom”在内存的存储空间的首地址。
- 例如:Scanner scanner = new Scanner(System.in);
- 此时Scanner也是一种类引用数据类型。
- 更广泛地,我们自己创建的类,也是一种复合数据类型。
头脑风暴
1.在“商院面馆”的经营中,我们会用到什么变量 ?可以用什么类型定义 ?
2.在你的项目中,会用到什么变量 ?又可以用什么类型定义呢 ?
练习:面馆点餐
商院面馆: 招牌牛肉面和酸梅汤,牛肉面10元/碗,酸梅汤 3元/碗
程序的作用是询问点餐的顾客 点几碗牛肉面 和 几杯酸梅汤,然后在控制台上打印出账单。
package task2; import java.util.Scanner; public class Variable { public static void main(String[] args) { // TODO Auto-generated method stub //第一步,获得用户输入 Scanner sc = new Scanner(System.in); System.out.print("请问您想点几碗牛肉面:"); int num1 =sc.nextInt(); System.out.print("请问您想点几杯酸梅汤:"); int num2 =sc.nextInt(); sc.close(); //第二步,计算账单金额 float price1=10.0f;float price2 =3.0f; float sum = price1*num1+price2*num2;//计算总金额 //第三步,输出账单金额 System.out.printf("您点了%d碗牛肉面,%d杯酸梅汤,一共 %.2f元",num1,num2,sum); } }