Java 基本数据类型+引用数据类型详解

一.数据类型

java是强类型语言,指的是一旦一个常量或变量声明出来,它的类型就确定了,以后都不会变成其它类型,声明的时候是整型,以后都是整型(ps:javascript是弱类型)var i =10;si = "hello";var d =new Date();

int i =10;i ="hello";//XXXXXX

java的数据类型包括哪些呢?int a = 6;Scanner input = new Scanner(System.in);


基本数据类型只有8个:byte、short、int、long、float、double、char、boolean

注意: String不是基本数据类型!!!是引用类型
引用数据类型有无限个

二.数学进制

(1)十进制

日常生活中使用的进制都是十进制,因为古人数数只能用10个手指头,满10进1基数有10个,0到9,满10进1

7332 = 7 * 10(3) + 3*10(2) + 3*10(1) + 2*10(0)

(2)二进制

1 二进制是谁发明?如何发明的18世纪德国数理哲学大师莱布尼兹发现 部分灵感来源于中国古代哲学,如易经二进制转成10进制11111 = 1*2(0) + 1*2(1) + 1*2(2) + 1*2(3) + 1*2(4) = 1 +2 + 4 + 8+ 16 = 210001 = 10010 = 21010 = a 101011 = b 111100 = c 121101 = d 131110 = e 141110 = f 15

2 二进制表示基数:只有1和0,逢二进一

3 二进制加法
   1011 0001
+ 0110 1001
 ---------------
1 0001 1010

十进制和二进制转换: 用短除法89 = 》101100189 = 64+16+8+1 = 1011001

100 0101 =》 69----------------------------78 = 》64 + 8 4+2 = 0100 1110

0101 1001 = 》64 +16 + 8+1 = 》89

(3)八进制

基数:0,1,2,3,4,5,6,7 逢八进13437218 = 2(3) = 》一个八进数 == 3个二进制数二进制和八进制转换1 101 = > 1*2(4-1) + 1*2(3-1) + 0 + 1 => 13(十进制) => 15(八进制)

24(八进制) = 》10 100(二进制)---------------------------------

01 110 101 = 》165(八进制)3721 = 011 111 010 001

(4)十六进制

十六制0 1 2 3 4 5 6 7 8 9 A B C D E F

16 = 2(4)一个十六制的数 等于 四个二进制的数

---------------------------------FF = 1111 1111C83D = 1100 1000 0011 1101

三.整数型

(1)byte

byte称之为一个字节,一个字节等于二进制的8位。-128 ~ 127-2(7)~ 2(7)-1

在计算机中,任何数据都是以二进制存储的,对于整型来说,正数存的是它的二进制原码,负数存储的是它的绝对值的二进制补码

负数的补码 = 先绝对值,再取反 再加1例1:


-128绝对值128二进制1000 0000取反:0111 1111加11000 0000(补码)


例2:


-9绝对值9二进制0000 1001取反1111 0110加11111 0111


例3:


34 = 32+2 = 0010 0010

-34 = 1101 1110

-69=1011 1011

(2)short

short 短整型short 16位的整型范围:-2(15) ~ 2(15)-1范围 -32768 ~ 32767----------------------

0111 1111 1111 11111000 0000 0000 0000

(3)int

1 范围大小int - 整型 32位int age = 12;int count=0;

范围:-2(31) ~ 2(31)-1

2 默认类型平常见到整型常量,它默认都是int类型System.out.println(100);a = b+3;

3 整型的在代码中的表示方式查询帮助文档把8进制或16进制以对应的进制输出。


1)int i = 89; 2) int i = 034;//打头的0表示这个数是一个八进制数 int b = 034; System.out.println(Integer.toOctalString(b)); 3)int i = 0xC4F;//0x 表示这个数是一个十六进制数 4)int i = 101011101;//是十进制,非二进制


4 获取int 最大值和最小值 Integer.MAX_VALUE; Integer.MIN_VALUE;

 (4)long

1 范围

long - 长整型 64位 -2(63) ~ 2(63)-1

2 时间的毫秒数经常long表示 当前时间距离1970-1-1 0:0:0点的毫秒数 System.currentTimeMillis()

3 长整型的常量如何表示 我们要表示一个长整型,需要在数值的后面加上L 128 //int整型 128L //长整型 128l;//不要写l,看起来像1

 四.浮点型

(1)float

1 范围 float - 单精度浮点,32位 但是虽然是32位,但存储方式跟整型完全不同

2 float表示法 必须在数值后面加F float f = 2.89F;

(2)double

1 范围 双精度浮点 64位 表示的范围要比long类型(也是64)要大,主要是跟它的存储的方式

2 double的表示 1)默认情况下,所有的小数常量都是double double d = 7.89; System.out.println(3.14); 2) 明确表示,在数值后面加上D double d = 7.89D;

3 科学计数法 3617859.212343 = 》3.617859212343E6 double d = 3.617859212343E6;

4 float和double精确性 有一些数是不能精确表示 2.0-1.1 = 0.9;//可是不是 结论是,尽量避免比较2个浮点数是否相等!!!!! System.out.println(2.0-1.1==0.9); 如果真的要得到一个精确的表示,或者要比较2个小数的大小,怎么办??请用BigDecimal类 BigDecimal t = new BigDecimal("2.0");//参数以字符串形式表示 BigDecimal y = new BigDecimal("1.1"); BigDecimal r = t.subtract(y); System.out.println(r);

五.字符型

1 char 存储字符的,范围是16位 char也可以当作短整型看,但是char是无符号整型 所以能表示范围是0~65535 换句话,我们的字符最多能表示65536个字符,其中中文占了大概40000多个 0-127 是早期计算机能够键入的128个字符,称作ascii码 内存中只能存二进制的数,所以任何的数据都要转成二进制,字符也不例外。我们没办法在内存中直接存一个'中',所以会将'中'对应一个整型数值,然后再把这个数值的二进制存进内存 '中'到底对应什么数值?这由各国或者标准组织制定的编码决定。 假设中国的国标码gb2312把'中' ==》23432,然后国际上的utf-8把‘中’==》20013,如果存进内存存的是gb2312,从内存中读出来使用utf-8,这就会导致乱码

 

2 char是如何表示 char c = 'A'; //最基本的表示法 char c = 65;//用整型数值表示 char c = '\u0041';//采用16进制的unicode码

3 转义 在计算里,很多字符是当中程序的特殊用途,或者有一些字符通过键盘是输入不了的,此时就需要用一些普通字母加上\,结合在一起表示一种特殊的字符 例如回车\r ,换行用\n, 制表符\t

六.布尔型

1 范围 由jvm本身决定,jdk规范标准没有对就boolean值严格规定要由多少位来保存。 官方的jdk,民间的openJDK,IBM JDK对boolean存储位数可能都不一样

2 boolean的取值 要么true,要么false boolean b1 =true; boolean b2 = false; boolean b3 = TRUE;//错误 boolean b4 = FALSE;//错误 boolean b5 = 1;//错误 boolean b6 = 0;//错误

3 布尔值 经常用在条件判断,循环控制案例:1.过马路 2.领钱

七.字符串型String

1 String 字符串类型,是由0到多个char连在一起组成的一串字符 它是一个引用数据类型

2 String表示 需要用""将一串字符引起

3 定义字符串 String s = "HelloWorld"; String s1 = "";//表示空字符串 String s2 = " ";//表示字符串里面有一个空格 String s3 = "Hello\nWorld";

八.Scanner

1 Scanner 可以动态接收用户输入的数据: 案例:用户名和密码的输入。

扫描器,从jdk1.5提供 用来扫描输入流中的字符串内容

2 构建一个终端扫描器 Scanner scan = new Scanner(System.in); ps:System.out -- 终端输出流 System.in -- 终端输入流

3 使用Scanner nextInt();//读取一个整型数据 nextBoolean();//读取一个boolean值数据 nextLong(); nextShort(); nextFloat(); nextDouble(); nextByte();

next();//读取一个字符串型 abc nextLine();//读取一整行字符串 abc def

abc def hij klm

九.类型提升和强转

1 什么是类型提升和强转 自动类型转换:小的数据类型可以自动(隐式)提升为大的数据类型,例如int -> long 强制类型转换: 小数据类型的变量存取大数据类型的值,例如 long l=8L; int i=l;此时编译会报错。但是开发者可以用明确指令告诉编译器,所有责任由开发者承担。这就是强转

2 示例 //自动类型转换 //类型要兼容,小变大 int i = 89; System.out.println(i); double d = i;//自动转换为double System.out.println(d); //强制类型转换 //类型要兼容,大变小,注意精度可能会丢失 double d2 = 90.78d; System.out.println(d2); int i2 = (int)d2;//有程序员承担责任后,强行转换为int System.out.println(i2);3 自动提升方向

 

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值