数据类型是分配内存数据单元的大小
int age = 5;
数据类型分为两大类:基本类型,引用类型
基本类型有8种:byte short int long
float double boolean char
引用类型:没数
如何区别变量的数据类型:除了基本类型都是引用类型
如:String str; str是引用类型的变量
引用类型在面向对象阶段详细讲解
计算机内存中使用2进制数据!
基本类型有8种:
整数4种:都是有符号数(+ -)
byte 8位(补码) 范围 -128 ~ 127
short 16位(补码) 范围 -32768 ~ 32767
int 32位(补码) 范围(约) -21亿 ~ 21亿
-2^31 ~ 2^31-1
long 64位(补码) 范围 很大
-2^63 ~ 2^63-1
一定了解数据的边界,避免超范围计算(会溢出)
使用原则:一般使用int,如果不过范围使用long
很少使用short(基本不用),byte用的不多
在表示最基本的数据单元使用,如文件的数据
16G = 1024*1024*1024*16(Byte)
K M G 8bit(位)
= 1024*1024*1024*16*8(bit)
直接量(常数):就是直接给出的数据
int age = 5; 其中5就是直接量
age是变量
直接量 == 字面量
1) 默认的直接量是 10进制,数字:
0 1 2 3 4 5 6 7 8 9
2) 以0开头的是8进制, 数字:0 1 2 3 4 5 6 7
3) 以0x开头是16进制, 数字:
0 1 2 3 4 5 6 7 8 9 a b c d e f
10 11 12 13 14 15
4) 经过编译处理以后,都是2进制数据
5) 10进制,是人类的习惯,书写理解方便
6) 8进制和16进制是计算机专业中,2进制的缩位
简写形式,其中8进制是每3位的缩写,16进制是
每4位的缩写
总结:
1) 计算机内存总只有2进制
2) 默认情况输入输出采用10进制
在输入输出时候采用API(Integer)转换为2进制
3) 为方便书写2进制,使用16进制缩写书写2进制
面试奇葩题:
int c = 078;
System.out.println(c);
输出结果:
A.编译错误 B.运行异常 C.78 D.078
字面量的后缀:L l 表示long类型数据
直接写的整数字面量是int类型
如: long l = 129299292929;//编译错误
long l = 129299292929L;
long 类型可以作为时间
2 浮点数(小数): float double
浮点数标准请参数 : IEEE754标准
1) float 是32位浮点数
2) double 是64位浮点数 的精确度大约是float两倍
3.1415926535897932384626433832
314.1592 = 3.141592 * 10 * 10
3) 为了计算准确一般采用double
4) 浮点数计算是不绝对精确的,有舍入误差
5) F/f 是float后缀 D、d是double后缀
6) 如何不精确比较
Math.abs(Math.sin(3.1415926)) < 0.0000000001
3 boolean 布尔类型
只有两种字面量:true(真)false(假)用于表示
两种状态
boolean open = true; //营业
boolean used = true; //used 使用过,二手
if(used){
System.out.println("二手八折!");
}else{
System.out.println("新货八折!");
}
4 字符类型 char:字符类型是一个整数
java的字符类型,是一个16位无符号整数
范围: 0 ~ 65535
char c = 20013;// 中
System.out.println(c);//中
char ch = '中';//20013
System.out.println(
Integer.toBinnaryString('中'))
字符字面量
1) 字符字面量的定界符是单引号: '0'
注意: "ABC" 是字符串
2) 字符字面量实际也是一个整数
3) 控制字符等,没有输出效果
4) 特殊字符可以利用"转义字符"
回车 c = '\r'
换行 c = '\n'
退格 c = '\b'
tab c = '\t'
单引号 c = '\''
双引号 c = '\"'
斜线 c = '\\'
unicode 编码 c = '\u4e2d' '中'
5 基本类型 数据类型转换
1) java的数据有明确的数据类型(强类型语言)
2) 不同类型数据赋值,就需要类型转换
3) 数据类型转换分为:自动类型转换 强制类型转换
4) 自动类型转换:小范围到大范围的转换自动完成
long l = -2;//自动的将int -2转换为long -2
//需要将32位补充为 64位的-2,然后赋值给l
5)强制类型转换
long l;
int i
i = (int)l;
l = 01010100... 00 000 ... 0100
63 32 31 0
i = (int)l; i = 000 ... 0100
31 0
234000000000000000000000000010
2.34 * 10^29
2.34 29
float
6 Java 的数学运算符: + - * / %
1) 运行的封闭性
同种类型数据参与运算,返回同种类型结果
2) 小于32位的数据按照 32位计算
byte short char
3) java 不检查运算结果是否溢出
溢出不会出现错误!
4) 字面量的运算在编译期间运算,执行时候是固定值
5) “int字面量”如果不超过 小类型的范围,可以自动
赋值给小类型变量
char ch = 'A'+5;
//ch = 'A'+n;//编译错误
char c = 20013;
//char c = 70013;
int i = 20013;
char c = i;//编译错误
7.基本的输入输出
Scanner是SDK1.5新增的一个类,可是使用该类创建一个对象.
Scanner reader=new Scanner(System.in);
然后reader对象调用下列方法(函数),读取用户在命令行输入的各种数据类型
next.Byte(),nextDouble(),nextFloat,nextInt(),nextLine(),nextLong(),nextShot()
上述方法执行时都会造成堵塞,等待用户在命令行输入数据回车确认.例如,拥护在键盘输入
12.34,hasNextFloat()的值是true,而hasNextInt()的值是false. NextLine()等待用户输入一个文
本行并且回车,该方法得到一个String类型的数据。
下面是一个实例:
import java.util.*;
public class Example
{
public static void main(String args[])
{
System.out.println("请输入若干个数,每输入一个数用回车确认");
System.out.println("最后输入一个非数字结束输入操作");
Scanner reader=new Scanner(System.in);
double sum=0;
int m=0;
while(reader.hasNextDouble())
{
double x=reader.nextDouble();
m=m+1;
sum=sum+x;
}
System.out.printf("%d个数的和为%f\n",m,sum);
System.out.printf("%d个数的平均值是%f\n",m,sum/m);
}
}
运行结果:
C:\java>java
Example请输入若干个数,每输入一个数用回车确认最后输入一个非数字结束输入操作34.13445d3个数的和为113.1000003个数的平均值是37.700000