第二课:数据类型与变量

一. 数据类型

整型     byte  short  int  long

小数     float  double

字符     char

布尔     boolean

d9466fec595a4c558c93db75d7dd7e74.png

1.不论在16位,32位还是64位系统,int都占用4个字节,long都占用8个字节

 👆可移植性,可以跨平台运行,“一次编译,到处运行”

2.在Java中,整型和浮点型都是带有符号的

以字节型来举例:一个字节8个bit位,第一个bit位是符号位,不计入数值

所以一共有7个bit位是数值位

所以范围是-2^8~2^7-1  -128~127

3.整型默认int型,浮点数类型默认为double类型

4.引用数据类型 String  数组  类  接口

二.变量

1.语法格式

数据类型 变量名 = 初始值;

Java当中局部变量在使用的时候必须初始化

public class Test {
    public static void main(String[] args) {
        int a = 10; // 定义整形变量a,a是变量名也称为标识符,该变量中放置的值为10
        double d = 3.14;
        char c = 'A';
        boolean b = true;
        System.out.println(a);
        System.out.println(d);
        System.out.println(c);
        System.out.println(b);
    }
}

2.整型变量

注意:

1.无论在任何系统下,int都是4个字节

2.int的包装类型是Integer

 注意:包装类型只针对基本数据类型,String不是包装类型

3.给变量设置初始值(字面值常量)时,注意不要超过int的范围

//int类型的范围
public class Test {
    public static void main(String[] args) {
        System.out.println(Integer.MIN_VALUE);//-2147483648
        System.out.println(Integer.MAX_VALUE);//2147483647
    }
}

3.长整型变量

long a = 10L;
System.out.println(a);
System.out.println(Long.MAX_VALUE);//9223372036854775807
System.out.println(Long.MIN_VALUE);//-9223372036854775808

1.长整型初始值后面加L(推荐,为了区分int和long两个类型)

2.long包装类型是Long

3.任何系统都是8个字节

4.短整型变量

System.out.println(Short.MIN_VALUE);//-32768
System.out.println(Short.MAX_VALUE);//32767

注意:对于byte,short这类小于4个字节的赋值的字面值,没有超过最大范围的时候,不会被解析为整型 

5.字节型变量

System.out.println(Byte.MIN_VALUE);//-128
System.out.println(Byte.MAX_VALUE);//127

e02b43ba657e42258b3dfcb7cba2fade.png

为什么127+1 = -128呢

因为把加之后的数据存到不能存128这么大的变量里面,所以数据溢出

回归这个经典的图

18d48fd2511143818fcfdb004882a56d.png 

6.浮点型变量

1.除法

b98dc0e0ff6448488e2ddbc9195d66a6.png

在Java中,int除以int的值仍然是int(会直接舍弃小数部分),要得到0.5需要使用double类型计算

cbf74b795d70435097045d92631f3e65.png 

 2.乘法

double num = 1.1;
System.out.println(num * num); // 输出1.21吗?
// 执行结果
1.2100000000000002

 浮点数没有一个非常精确的数字,没法精确到小数点后几位,只能是一个近似值

3.浮点数与整数在存储方式上有很大不同,不是单纯用2^n来存就行

分为符号位,指数位,尾数(参考 不能错过的数据在内存中的存储剖析)

 4.单精度浮点类型

float f = 12.5f;//加这个f把8个字节转换成4个字节

7.字符类型变量

1. Java 中使用 单引号 + 单个字母 的形式表示字符字面值.
char ch = '呵';
System.out.println(ch);
2. 计算机中的字符本质上是一个整数. 在 C 语言中使用 ASCII 表示字符, 而 Java 中使用 Unicode 表示字符. 因此 一个字符占用两个字节, 表示的字符种类更多, 包括中文(因为一个汉字占两个字节)
 
执行 javac 的时候可能出现以下错误:
Test.java:3: 错误: 未结束的字符文字
char ch = '鍛?';
^
此时我们在执行 javac 时加上 -encoding UTF-8 选项即可
javac -encoding UTF-8 Test.java

char的包装类型为Character



8.布尔型算法

1.boolean类型只有两种取值,true表示真,false表示假

2.Java 的 boolean 类型和 int 不能相互转换, 不存在 1 表示 true, 0 表示 false 这样的用法.

boolean value = true;
System.out.println(value + 1);
// 代码编译会出现如下错误
Test.java:4: 错误: 二元运算符 '+' 的操作数类型错误
System.out.println(value + 1);
^
第一个类型: boolean
第二个类型: int
1 个错误

三.类型转换

int a = 10;
long b = 100L;
b = a; // 可以通过编译
a = b; // 编译失败

不同类型的变量相互赋值需要进行类型转换

1.自动类型转换

程序自动转换

float f = 3.14F;
double d = 5.12;
d = f; // 编译器会将f转换为double,然后进行赋值
f = d; // double表示数据范围大,直接将float交给double会有数据丢失,不安全

2.强制性类型转换

float f = 3.14F;
double d = 5.12;
d = f; // float-->double,数据范围由小到大,隐式转换
f = (float)d; // double-->float, 数据范围由大到小,需要强转,否则编译失败

后果:可能会丢失数据,会产生意想不到的问题

3.类型提升

不同类型数据进行计算时,范围小的类型会被提升为范围大的类型

int 和 long

int a = 10;
long b = 20;
int c = a + b; // 编译出错: a + b==》int + long--> long + long 赋值给int时会丢失数据
//int c = (int)(a+b) 可以这么改,但是会数据丢失
long d = a + b; // 编译成功:a + b==>int + long--->long + long 赋值给long

byte和byte

02dc7a9d3718401f8dd10a1f08bcfcde.png

由于CPU通常按照4个字节为单位从内存中读写数据,低于4个字节的类型会先提升成int再计算

 a + b得到的结果会被类型提升,得到的是int类型,与前面的byte不符合,产生错误.

//修改1
int c = a + b;
//修改2
byte c = (byte) (a + b);

四.String

String str = "hello";
System.out.println(str);
System.out.println(str.length());//输出长度,5

 这个字符串以什么结尾?

答案:没有,这不是我们C语言所说的\0结尾,这个hello底层是一个数组

int和string类型转换

String str2 = "345";
int val = Integer.valueOf(str2);
//int val = Integer.parseInt(str2);
System.out.println(val+1);//346

int p = 100;
String str3 = String.valueOf(p);
System.out.println(str3);//100

 拼接符号

fd6dacdbfb65407d88c894dcadffe000.png

当一句话里面有出现字符串和+,这里的+一般是拼接作用

小测试

        System.out.println(a+b + "a + b ");//?
        System.out.println("a + b = "+a+b);//?

8ec94268a128438284143f960142a2d7.png 

 
 
 
 
 
 
 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值