Day04 基础03-05
-
强类型语言
-
要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用
-
安全性高,速度慢
-
-
弱类型语言
Java的数据类型分为两大类
基本类型
数值类型
整数类型
-
byte占1个字节 范围:-127~128(-2的7次方~2的7次方减1)
-
short占2个字节 范围:(-2的15次方~2的15次方减1)
-
int占4个字节 范围:(-2的31次方~2的31次方减1)
-
最常用
-
-
long占8个字节 范围 :(-2的63次方~2的63次方减1)
-
long类型要在数字后加L
-
浮点类型
-
float占4个字节
-
float类型要在数字后加F
-
-
double占8个字节
字符类型:char占2个字节
boolean类型:占一位 其值只有true和false两个
引用类型
-
类
-
接口
-
数组
什么是字节
-
位(bit):是计算机 内部数据 存储的最小单位,11001100是一个八位二进制数,习惯用b书写
-
字节(bite):是计算机中 数据处理 的基本单位,习惯上用B书写
-
1B(bite,字节)=8bite(位)
-
字符:是指计算机中使用的字母、数字、字和符号
-
1bit表示1位
-
1Bite表示字节 1B=8b
-
1024B=1Kb
-
1024Kb=1M
-
1024M=1G
-
1024G=1TB
04 数据类型扩展及面试题讲解
整数拓展:进制
-
二进制:0b
-
十进制:正常
-
八进制:0
-
十八进制:0x 【0~9 A~F 16=0~16】
public class Dome03 {
public static void main(String[] args) {
//整数拓展:进制 二进制0b 十进制 八进制0 十六进制0x
int num1 = 10;
int num2 = 0b10;
int num3 = 010; //八进制0
int num4 = 0x10; //十八进制0x 0~9、A~F = 0~15
System.out.println(num1);
System.out.println(num2);
System.out.println(num3);
System.out.println(num4);
}
}有用
System.out.println("=========================================="); 输出作为分割线
浮点数拓展:避免浮点数进行比较!
public class Dome03 {
public static void main(String[] args) {
//浮点数拓展 银行业务怎么表示? 钱
//会用BigDecimal 数学工具类
//float 有限 离散 舍入误差 大约数 接近但不等于
//double
float f = 0.1F;
double d= 1.0/10;
System.out.println(f==d);//false
System.out.println(d);//0.1
System.out.println(f);//0.1
//==================================================
float f1 = 2323232323232f;
float d1 = f1+1;
System.out.println(f1==d1);//true
System.out.println(f1);//2.32323233E12
System.out.println(d1);//2.32323233E12
//==================================================
double D = 1/10;
float F = 0.1F;
System.out.println(F==D);//flase
System.out.println(D);
System.out.println(F);
}
}
避免浮点数进行比较!
避免浮点数进行比较!
避免浮点数进行比较!
字符拓展:
public class Dome03 {
public static void main(String[] args) {
//=========================================================================
//字符拓展
//=========================================================================
char c1 = 'a';
char c2 = '中';
System.out.println(c1);
System.out.println((int)c1);//强制转换成int类型 数字输出
System.out.println(c2);
System.out.println((int)c2);//强制转换成int类型 数字输出
//强制转换可以把字符换成数字
//所有字符本质还是数字
//编码 unicode 2字节 65536 Excel (只有2的16次方=65536行)
//unicode表: (97 = a ;65 = A)
//U0000 UFFFF
char c3 = '\u0061';
System.out.println(c3);//a (据说是十六进制 97转化为十六进制是61)
//转义字符 (可自行百度拓展)
//\t 制表符
//\n 换行
//.....
System.out.println("Hello\tWorld!");//Hello World
System.out.println("Hello\nWorld!");//Hello +enter World
String sa = new String("hello world");
String sb = new String("hello world");
System.out.println(sa==sb);//false WHY???
String sc = "hello world";
String sd = "hello world";
System.out.println(sc==sd);//true
//学到对象 从内存级别分析
}
}
布尔值拓展
public class Dome03 {
public static void main(String[] args) {
//============================================================================
//布尔值扩展
//============================================================================
boolean flag = true;
if (flag==true){} //新手
if (flag){} //老手
//Less is More! 代码要精简易毒
}
}
05 类型转换
-
由于Java是强类型语言,所以要进行有些运算的时候,需要用到类型转换。
-
-
运算中,不同类型的数据先转化位同一类型,然后进行运算。
-
小数(浮点数)优先级高于整数
强制类型转换:高-->低
自动类型转换:低-->高
public class Dome04 {
public static void main(String[] args) {
int i = 128;
byte b = (byte)i; //强制转换
double d = i; //自动转换
//强制转换 高-->低 需加:(类型)变量名 变量名不能相同
//自动转换 低-->高
System.out.println(i); //128
System.out.println(b); //-128 出现问题 内存溢出 byte [-128,127]
System.out.println(d); //128.0
System.out.println("=============================");
System.out.println((int)23.7);
System.out.println((int)-45.78f); //老手?
//上下代码相等 上较简单?
double num1 = 23.7;
float num2 = -45.78f;
System.out.println((int)num1);
System.out.println((int)num2);
System.out.println("=============================");
char x = 'a';
int y = x+1;
System.out.println(y);
System.out.println((char)y);
/*
注意点:
1.不能对布尔值进行转换
2.不能把对象类型转换为不相干的类型
3.在把高容量转换为低容量的时候,强制转换
4.转换的时候可能存在内存溢出,或者精度问题(小数到整数会自动舍去)
*/
}
}
常见问题
public class Dome05 {
public static void main(String[] args) {
//常见问题!!!
//操作比较大的数的时候,注意溢出问题
//JDK7新特性,数字之间可以用下划线分割
//int money = 1000000000 --> 10_0000_0000
int money = 10_0000_0000;
int year = 20;
int total = money*year;
int total2 = money*year; //默认是int,转换之前已经存在问题了,所以输出还是有问题
long total3 = money*(long)year; //方法:先把一个数据转换为long!可正确输出
System.out.println(total); //-1474836480,计算的时候溢出了
System.out.println(total2); //-1474836480,计算的时候溢出了
System.out.println(total3); //20000000000 正确计算
/*
(自己想法)
int money = 10_0000_0000; //方便!
int year = 20;
long total = (long)money*(long)year;
System.out.println(total); 200_0000_0000
*/
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现