2基础数据类型笔记

基础数据类型详解
1 基础数据类型分类
1.1 整数型数据类型
各种基础数据类型所占字节数的大小(单位Byte)
整数型数据 byte 1 short 2 int 4 long 8
小数型数据 float 4 double 8
字符型数据 char 2
布尔型数据 boolean 1 12345
数据类型所占空间的大小:
byte — 字节型数据类型,在内存中占用1个Byte,所能
表示的范围是多少?-128~127
short— … 在内存中占用2个Byte,所能表示的范围
是多少?-32768 ~ 32767
int ---- 整型 在内存中占用4Byte,所能表示的范围是多
少?-2147483648 ~ 2147483647
long — 长整型 在内存中占用8Byte
在java中,定义整数型数据的时候,如果字面量是十进制的数值,
那么java会自动默认为int型。
也就是说:int short byte long 这几个,只要后面跟的
是十进制的整数,那么它们都被默认为int型
Test01.java:12: 错误: 不兼容的类型: 从int转换到
byte可能会有损失
byte b = -129;
为什么有损失?怎么损失的?
class Test01
{
public static void main(String[] args) 123456789
10
11
12
13
14
15 {
16 //基础数据类型–8种基本数据类型
17 // int short long byte 这四种是整数
18 // float double 这两种是小数
19 // char 这种是字符
20 // boolean 这种是true false
21
22 // byte b = -128; //这样可以
23 byte b = (byte)300;
24 System.out.println(b); // 这个结果是多少?
25
26 byte m = -1;
27 // 第一步,-1这个字面量被默认为int型,它的存储
方式为:11111111 … 11111111
28 // 第二步,在byte取值范围内,会自动截掉前面3个
Byte,只留下最后一个Byte,
29 // 因为,前面的全是0以及符号位
30 // 第三步,只保留最好一个字节,该字节中存储的是
该字面量的补码形式(正数的原码、反码、补码都一样)
31 // 负数的补码需要计算,我们需要的是原
码,
32 // 拿到的是补码,补码先-1,然后符号位
不变,按位取反,得到原码
33
34 System.out.println(m);
35 /*
36 E:\java基础\1-20-2>javac Test01.java
37 Test01.java:12: 错误: 不兼容的类型: 从int转换到
byte可能会有损失
38 byte b = -129;
39 ^
40 1 个错误
41 */
42 // short s = 32767;
43 }
44 }
45在这里插入图片描述

1.2 关于计算机内存中存储的二进制
1.3 long和int的区别
记住,在计算机内存存储的二进制都是以补码的形式进行存储,在
内存中第一位表示符号位,0表示正,1表示负
什么是补码?
对于一个正数来说,它的原码、反码、补码都一个样
如:10的原码:00000000 00000000 00000000
00001010
对于一个负数来说,它的原码、反码、补码是什么样子的、
原码很简单,就是一个整数的二进制表示,第一位是符号位
如:-1的原码:10000000 00000000 00000000
00000001
反码:符号位不变,其他位取反也就是说,原来是0的要
变成1,是1的要变成0,记住符号位不变
-1的反码:11111111 11111111 11111111
11111110
补码:反码+1
-1的补码:11111111 11111111 11111111
11111111
123456789
10
11
class Test01
{
public static void main(String[] args)
{ 1234
1.4 float 和 double
// long l = 3000; // 这样可以吗。我们知道
3000 默认为int型,直接给long赋值可以吗?
// 对于long来说,它有8Byte,int是4Byte,所以
能够直接转换
//long l = 2147483648; // 这样写可以吗?为什
么?
// 这样做不可以,编译不通过。
// 因为整型的字面量会被默认为int型,2147483648
超出了int的范围。所以编译器报错。
/*
E:\java基础\1-20-2>javac Test01.java
Test01.java:7: 错误: 整数太大
long l = 2147483648;
// 这样写可以吗?为什么?
^
1 个错误
*/
long l = 2147483648L;// 这样做就可以让编译器
编译通过。
// 3000 和 3000L有什么区别?从字面量上看,没啥
区别,但是实质上有本质的区别
// 3000 是int型,只要4Byte装,3000L是long, 要8个Byte装。
// 大写的L和小写的l都可以,但是l和1好像不太好区
分,所以建议大家都用L
System.out.println(l);
} } 56789
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Test01
{
public static void main(String[] args)
{
float pi = 3.14; 12345
6 double pi2 = 3.1415926; 78 System.out.println(pi);
9 System.out.println(pi2);
10 }
11 }
12 编译器报错:
13 E:\java基础\1-20-2>javac Test01.java
14 Test01.java:5: 错误: 不兼容的类型: 从double转换到
float可能会有损失
15 float pi = 3.14;
16 ^
17 1 个错误
18
19
20 class Test01
21 {
22 public static void main(String[] args)
23 {
24 float pi = 3;
25 double pi2 = 3.1415926;
26
27 System.out.println(pi);
28 System.out.println(pi2);
29 }
30 }
31 编译通过。
32
33 E:\java基础\1-20-2>javac Test01.java
34
35 E:\java基础\1-20-2>java Test01
36 3.0
37 3.1415926
38
39
40 为什么?
1.5 char

  1. 只要是字面量为小数,系统默认为double型的,double占了
    8个字节,float只占了4个字节
  2. 如果给的字面量是整数,它就编译通过了呢?因为int是4字
    节,float也是4字节的,所以能通过。
  3. 补充,float比long所表示的范围要大。这个东西希望你们记
    住就可以了,float占4个字节,long占8个字节,但是float要 比long大。
  4. 定义float类型的变量,其后的字面量为小数一定要带F
    41
    42
    43
    44
    class Test01
    {
    public static void main(String[] args)
    {
    // float pi = 3.1;
    double pi2 = 3.1415926;
    char c = ‘a’; // 2Byte
    int cc = ‘a’;
    char ch = 98; // 这样行不行?
    char ch1 = 32767;// 这样可以吗?可以啊。没有
    越界,因为char是2Byte
    char ch2 = -32767;// 这样可以吗?不可以。为什
    么呀?因为char是没有负数取值的
    System.out.println(ch2);
    System.out.println(pi2);
    } }
    class Test01
    {
    public static void main(String[] args)
    {
    char c = ‘a’; // 2Byte
    int cc = c; // 这样可以
    123456789
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24 System.out.println©;
    25 System.out.println(cc);
    26 }
    27 }
    28
    29 class Test01
    30 {
    31 public static void main(String[] args)
    32 {
    33 int c = ‘a’;
    34 char cc = c; // 这样可以,因为c是
    int型的变量,它是4Byte的,如果直接赋值给char,这样编译器
    是无法识别的。
    35 System.out.println©;
    36 System.out.println(cc);
    37 }
    38 }
    39
    40 编译会报错:
    41 E:\java基础\1-20-2>javac Test01.java
    42 Test01.java:6: 错误: 不兼容的类型: 从int转换到char可
    能会有损失
    43 char cc = c; // 这样可以吗?
    44 ^
    45 1 个错误
    46
    47
    48 结论:在基础数据类型中,如果大转小,不强制类型转换,编译是
    通不过的。
    49

50 class Test01
51 {
52 int i = 10; // 1
53
54 int i; // 2
55 int j = 10; // 2
1.6 boolean
i = j; // 2
// 请问1 和 2 等价吗?是一样的吗?不一样
public static void main(String[] args)
{
int c = ‘a’;
char cc = c; // 这样可以吗?为什么?
System.out.println©;
System.out.println(cc);
// 整数型的字面量都默认为int
short i = 10;
// 拆分 我们以前说这样的方式是等价的,到底等不等
价呢?其实不等价!!!!!!
int j = 10;
short i = j;
} }
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
class Test01
{
public static void main(String[] args)
{
boolean flag = true;// flase
int j = (int)flag;// 这样可以吗?
/*
E:\java基础\1-20-2>javac Test01.java
Test01.java:6: 错误: 不兼容的类型:
boolean无法转换为int
int j = (int)flag;//
这样可以吗?
^ 123456789
10
11
12 1 个错误
13 */
14 System.out.println(j);
15 }
16 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值