java数据类型
Java语言是强类型语言,对于每一种数据都定义了明确的具体数据类型,在内存总分配了不同大小的内存空间。包括如下两大类数据类型:
基本数据类型:
整数:byte、short、int、long
浮点数:float、double
字符类型:char
布尔类型:boolean
引用数据类型:
类(class)
接口(interface)
数组( [ ] )
1.整数类型
在Java中,整数类型共有4种(包括byte、short、int、long),它们有固定的表述范围和字段长度,Java语言中,整数有三种表现形式,分别是:
a. 十进制整数,如 120, -31, 0
b.
八进制整数,要求以0开头(注意这是数字0,不是字母o),如:012,
c. 十六进制整数,要求以0x开头(注意这是数字0,不是字母o),如:
0x12
Java语言中,默认的整数类型是int类型,声明long类型的时候,后面必须要加个l或者L。
有必要说明一下表数范围,以byte类型为例:由于byte是8位的,当最高位为符号位时,表示的最大整数就是二进制:0111-1111,也就是2^7-1=127。而能够表示的最小负数的二进制表示形式为:1111-1111,按理说应该为-127。但是我们都知道byte占8位。则不同的组合为2的8次方等于256,也就是byte最多可以表示256个不同的数,但是这里0与-0表示一样的数了,所以就用-0的二进制补码表示到-128里面去了。
2.浮点类型
与整数类型一样,同样有固定的表述范围和字段长度,
Java语言中,浮点类型有两种表现形式,分别是:
a. 十进制数形式, 如3.14
b. 科学计数法,如,3.14e2,
3.14e-2, -3.14E2
Java语言中,默认的浮点数类型是double,声明float类型的时候,后面必须添加字母f或者F,如3.14F,3.14f。例如:float
a=5.6f;(直接将5.6给float赋值是错误的,5.6默认的类型为double。而如果将float
a=5;这样复制后,编译就不会报错,只是将5看作默认的double类型,打印输出值为5.0。)
其实在实际的应用中,如果要进行精确的小数计算或者是大数计算,建议使用java.math.BigDecimal类。
3. 字符类型
字符类型是用‘‘单引号括起来的单个字符,例如char c = ‘w‘; char a =
‘中‘,可以看到Java中的char类型是可以表示中文字符的;Java字符采用Unicode(全球语言统一编码)编码,每个字符占两个字节。
Java中允许使用转义字符‘\‘将其后面的字符转换成其他含义, 如:
char c = ‘\n‘; //表示换行
4.布尔类型
boolean类型的值只有两种:true,false。boolean类型不可以转换为其他的数据类型(所以有过C语言编程基础的人可能认为1也能在Java中表示为true,这是错误的)。
5.数据所占空间
基本数据类型,是比较简单地表达一些基本的数据类型。每种数据类型在内存中占的空间不一样
? byte(字节型):计算机中1字节一般来说占8位。
? char(字符型):占2字节,也就是16位。
? short(短整型):占2字节,也就是16位。
? int(整型):占4字节,也就是32位。
? long(长整型):占8字节,也就是64位。
? float(单精度实型):小数点后保留7位有效数字,占32位。
? double(双精度实型):小数点后保留15位有效数字,占64位。
? boolean(字节型):占1字节,8位。
6.数据类型转换
1)从低精度向高精度转换
byte
、short、int、long、float、double、char
注:两个char型运算时,自动转换为int型;当char与别的类型运算时,也会先自动转换为int型的,再做其它类型的自动转换
2)基本类型向类类型转换
正向转换:通过类包装器来new出一个新的类类型的变量
Integer
a= new Integer(2);
反向转换:通过类包装器来转换
int b=a.intValue();
3)类类型向字符串转换
正向转换:因为每个类都是object类的子类,而所有的object类都有一个toString()函数,所以通过toString()函数来转换即可
反向转换:通过类包装器new出一个新的类类型的变量
4)基本类型向字符串的转换
正向转换:
如:int a=12;
String
b;b=a+””;
反向转换:
通过类包装器
①字符串—>int:
int
i=Integer.valueOf(“123”).intValue()
说明:上例是将一个字符串转化成一个Integer对象,然后再调用这个对象的intValue()方法返回其对应的int数值。
②字符串—>float:
float
f=Float.valueOf(“123”).floatValue()
说明:上例是将一个字符串转化成一个Float对象,然后再调用这个对象的floatValue()方法返回其对应的float数值。
③
字符串—>boolean:
boolean
b=Boolean.valueOf(“123”).booleanValue()
说明:上例是将一个字符串转化成一个Boolean对象,然后再调用这个对象的booleanValue()方法返回其对应的boolean数值。
④字符串—>double:
double
d=Double.valueOf(“123”).doubleValue()
说明:上例是将一个字符串转化成一个Double对象,然后再调用这个对象的doubleValue()方法返回其对应的double数值。
⑤字符串—>long
long
l=Long.valueOf(“123”).longValue()
说明:上例是将一个字符串转化成一个Long对象,然后再调用这个对象的longValue()方法返回其对应的long数值。
⑥字符串—>char
char=Character.valueOf(“123”).charValue()
说明:上例是将一个字符串转化成一个Character对象,然后再调用这个对象的charValue()方法返回其对应的char数值。
这个例子中说明数据类型中的部分问题:
1 package com.itheima;
2
3 import java.util.Scanner;
4
5 /**
6 * 这个程序解决的问题是:从键盘接受一个数字,列出该数字的中文表示格式,例如:键盘输入123,打印出一二三;键盘输入3103,打印出三一零三。
7 *
8 * 其中比较关键的问题是数据类型间的转换。
9 ①从键盘中输入的数字,被接受后,是以String类型保存的,
10 ②方法split()处理后得到是string类型的数组。而toCharArray()方法得到是char类型数组。两者的结果不是相同的。
11 ③在比较中,equals()方法和== 的区别简单的理解是:==比较的是2个对象的地址,而equals比较的是2个对象的内容。String类型的1和int类型的1是相等的,
12 ④switch中,如:
13 switch(A){
14 case B;
15 }
16 A部分中的值必须是int型的,或者是能够自动进行饮试转换成int型的表达式。也就是说A部分可以是byte/short/char/int型的。
17 其次要强调的是该程序中B部分的值必须是单个byte/short/char/int型的值,或者是final型的变量。但是final型的变量也是有要求的,也即是它必须是编译时的常量,
18 所以总结case后的值可以是常数值或final型的值
19 */
20 public class Test1 {
21
22 final static String[] digital = { ".", "-", "0", "1", "2", "3", "4", "5",
23 "6", "7", "8", "9" }; // 注意这里定义的是字符串类型的数字,也就是其中的0、1、2等数字是字符串类型,而不是整数类型
24 final static String[] china = { "点", "负", "零", "一", "二", "三", "四", "五",
25 "六", "七", "八", "九" }; // 定义汉字的数组,也是string类型的
26
27 public static void main(String[] args) {
28 Scanner scanner = new Scanner(System.in); // 定义 输入对象
29 for (int a = 0; a < 100; a++) { // 控制循环,使程序每次运行,最多可以输入100次
30 System.out.println("请输入一个数字(包括负数和小数),或者输入‘close‘结束程序"); // 打印 提示
31 String num = scanner.next(); // 获取输入的字符,是符串类型
32 if (num.equals("close") || a == 99) // 控制程序结束,当输入“close”或达到最大输入次数时结束程序,并提示程序结束
33 {
34 System.out.println("程序已结束!");
35 break;
36 }
37 if (!num.matches("(-?)[0-9]+(.[0-9]+)?")) { // 判断输入的字符串是否由0-9的数字(包括负数和小数)组成
38 //
39 System.out.println("输入错误!请输入正确格式的数字!" + "\n");
40 } else {
41 System.out.println("你输入的数字是:" + chang(num) + "\n");// 如果是
42 // 调用转换方法,将其按要求专函
43 }
44 }
45 }
46
47 /*
48 * 将阿拉伯数字转化为汉语数字的方法 str 输入阿拉伯数字的字符串 str2 返回的汉字字符串
49 */
50 private static String chang(String str) {
51 String[] c = str.split(""); // 将输入的字符串转换为字符串数组
52 String str2 = new String(); // 定义一个新的字符串,接收转换后的字符
53 for (int i = 0; i < c.length; i++) { // 循环转换字符串数组中的元素
54 if (!c[i].equals("") && c[i] != null) { // 去掉为空的情况,
55 for (int j = 0; j < digital.length; j++) {
56 if (c[i].equals(digital[j])) { // 将 元素与 定义好的 阿拉伯数字数组中的所有进行比较
57 str2 += china[j]; // 找到其对应的阿拉伯数字,就在 str2 后加入对应的汉语数字
58 }
59 }
60 }
61 }
62 return str2; // 返回转换完成的字符串
63
64 }
65
66 }
黑马程序员-数据类型