Day7知识总结

数据类型

基本数据类型

数值型:[ 整数类型 { byte(8位) 、short(16位)、int(32位)、long(64位)},浮点类型{float(32位)、double(64位) } ]
字符型:char(16位)
布尔型:boolean(8位)

引用数据类型

类(class)、接口(interface)、数组

 	int a=10;
 	System.out.println(a); //输出a的数据值,基本数据类型
 	int[] arr=new int[10]; //数组创建后,每个元素初始化为0
 	System.out.println(arr);
 	//变量arr对应的数据的引用地址,arr保存的是对应的数据的引用地址
    //arr 引用类型
    Scanner scanner=new Scanner(System.in);
    System.out.println(scanner);//scanner 引用类型

变量不是基本数据类型,就是引用数据类型
1byte(字节)=8bit(位)

int类型

int范围

int 32位
值范围: -2147483648~2147483647

利用Integer 引用类型得到int范围最大值与最小值
Integer.MAX_VALUE
Integer.MIN_VALUE

//求数据类型范围
//方法一
int max=Integer.MAX_VALUE;
int min=Integer.MIN_VALUE;
//方法二
int max=(int) Math.pow(2,31);
int min=-(int) Math.pow(2,31)-1;

//int min=-(int) (Math.pow(2,31)+1); 
 //Math.pow(2,31)+[强转]  值溢出,出错

直接量(字面量)

程序中直接使用的数据

整数直接量默认为int,即范围不能超过int类型范围;
整数直接量后添加大写L(小写l),将直接量转换为long类型
浮点数直接量默认位double,范围不能超过double类型范围;
浮点数直接量后添加大写F(小写f),将直接量转换为float类型
直接量,可以是十进制、八进制[0 零]、十六进制[0x,0X]、二进制

int a=100;
//直接量默认int类型,该数据值10000000000范围超出int范围
//int b=10000000000; 
//添加大写L(小写l),将直接量转换为long类型;
long b=10000000000L; 

//100L、100 变量存储空间不同,100L会多消耗些存储空间
long e=100L; //100L是long长整型(64位)直接量
long f=100;  //100是int整型(32位)直接量
 
//a-10,b-11,c-12,d-13,e-14,f-15[十六进制]
int a1=0x10+0x0f;  //16+15=0x1f;

变量数据类型不同,在内存所占存储空间不同

关于整型直接量(int)可直接赋值给short、byte、char

直接量int类型直接赋值给[short、byte、char]类型变量

一个直接量int类型直接赋值给[short、byte、char]类型变量是可行的

只要赋予数据类型的值不超过该数据类型的取值范围,系统自动转换
例如 byte a=100 等价 byte a=(byte)100
系统自动强制转换
若赋予的值超过了数据类型的取值范围,则需手动强制转换数据类型,否则系统程序会报错
例如 byte a=128
报错:Type mismatch: cannot convert from int to byte
手动强制转换: byte a=(byte)128
强制转换溢出数据存在精度损失

//自动转换功能
//只要赋予数据类型的值不超过该数据类型的取值范围,系统自动转换;
//若赋予的值超过了数据类型的取值范围,则需手动强制转换数据类型
//手动强制转换,强制转换溢出数据,存在精度损失
byte c=(byte)200; 
//手动强制转换 200溢出byte数据范围,需手动强转
short a=79;  
//系统自动强制转换 等价于 short a=(short)79
byte b=80;  
//系统自动强制转换 等价于 byte b=(byte)80
byte b1=45;  
//系统自动强制转换 等价于 byte b=(byte)45

int类型的变量直接赋值给[short、byte、char]变量

一个int类型的变量直接赋值给[short、byte、char]变量,是错误的,需要进行类型的强制转换

int c1=100;
byte c3=c1; //手动强制转换
byte c3=(byte)c1;

 //系统自动强制转换,**int类型直接量**直接赋值给数据类型
byte c1=100;
手动强制转换,**int类型变量**直接赋值给数据类型
int c2=100;
byte c3=(byte) c2; //手动强制转换

两个[short、byte、char]变量相加、减、乘、除

两个[short、byte、char]变量相加、减、乘、除,会报错
由于系统防止两个数进行相加后的值有可能会溢出的危险,因此系统自动进行强制转换

byte b2=b+b1;
系统自动强制转换 等价 byte b2=(int)b+(int)b1;
(int)b+(int)b1,返回的是int类型值,与byte类型变量不匹配
解决方法:计算后,手动强制转换数据类型,但存在溢出可能
byte b2=(byte) (b+b1);

byte b=80;  //系统自动强制转换 等价于 byte b=(byte)80
byte b1=45;  //系统自动强制转换 等价于 byte b=(byte)45
//byte b2=b+b1; 
 //系统自动强制转换 等价 byte b2=(int)b+(int)b1;
//(int)b+(int)b1 ——返回的是int类型值,与byte类型变量不匹配

//计算后,手动强制转换数据类型,但存在溢出可能
byte b2=(byte) (b*b1);  

两个int相除(/),取整

避免溢出

溢出不是编译错误,只是计算不准
正数溢出变负数;负数溢出变正数

int max=Integer.MAX_VALUE;
int min=Integer.MIN_VALUE;
System.out.println("————正数溢出变负数————"+max+1);
System.out.println(max+1);
System.out.println("————负数溢出变正数————");
System.out.println(min-1);

通过改变数据类型,避免溢出

//参与运算的结果,以数据类型大的范围为准
//int类型+long类型=long类型
System.out.println("通过改变数据类型,避免溢出");
System.out.println("最大值+1:  "+(max+1L));
System.out.println("最小值-1:  "+(min-1L));
//1为整型直接量(int),在1后面加L即(1L)是一个long类型的直接量

参与运算的结果,以数据类型大的范围为准
例如:int类型+long类型=long类型

数据类型范围从小到大
char<byte<short<int<long<float<double

int d1=30;
long d2=300;
float d3=2.2F; //字面量后面加F,表float类型
double d4=2.5; //字面量为小数,默认double类型
//int+long=long
long sum1=d1+d2;
//int+long+float=float
float sum2=d1+d2+d3;
//int+long+float+double=double
double sum3=d1+d2+d3+d4;

%运算符

取余,奇偶判断,整除,取数据每一位数字,公约数

long类型

时间

System.currentTimeMillis() long类型

数据类型转换

小类型范围变大类型范围自动转化
大类型范围转小类型范围需强制转换

long time=System.currentTimeMillis();
//int time1=time;//数据类型不匹配
int time1=(int) time; //强制类型转换,可能存在溢出

语法正确,不代表数据正确 --例如 溢出
若计算表达式时,数据值溢出数据类型范围,有结果算出,但数据计算出的结果不正确

//三个1000相乘
//溢出:1000*1000*1000*10-是int,值溢出
long n1=1000*1000*1000*10;
//计算结果由大的数据范围决定,1000*1000*1000*10L
long n2=1000*1000*1000*10L;
//在计算至1000*1000*10000计算已溢出int范围
long n3=1000*1000*10000*10L;
//在运算前,确保运算结果为long——1000L*...此运算之后均为long类型
long n4=1000L*1000*10000*10;

在运算前,确保运算结果为想要的数据类型
例如:1000L*…
则运算之后均为想要的数据类型,规避计算时溢出

double、float类型

浮点数概念

浮点数不能精确运算,存在舍入误差,由于二进制中无法表示分数

double a1=3.0;
double a2=2.9;
System.out.println(a1-a2);
//0.10000000000000009舍入误差

BigDecimal、BigInteger用法

BigDecimal 可精确计算小数
BigInteger比long类型数据范围更大

//放入double类型本身不准确,因此需要放入字符串
//BigDecimal 可精确计算小数
//substract减 add加 divide除 multiply乘
BigDecimal big1=new BigDecimal("3.0");
BigDecimal big2=new BigDecimal("2.9");
BigDecimal bi1=big1.subtract(big2);
        
//比long类型数据范围更大
BigInteger bigint1=new BigInteger("92233720368547758070");
BigInteger bigint2=new BigInteger("100");
BigInteger bi2=bigint1.divide(bigint2); //相除取整

char类型

char基础

单引号(‘’)表示char类型,双引号表示String类型

char c1='a';//单引号表示char类型;
//char c2="a";编译错误 双引号表示String类型

字符类型==整数类型
16位无符号整数
char类型赋值(0~65535)
整数可参与运算
字符均有一个编码,这个编码是整数
无符号整数:无正负之分
ASCll Unicode编码
0-9:48~57
A-Z:65~90
a-z:97~122
JAVA中字符变量能存储中文
编码是Unicode,一个char类型占2个字节(即16比特),可以存储一个中文汉字

数据类型转换

char<byte<short<int<long<float<double

int a1=c1;
a1=c1+1;
char c2=(char)a1;
//int 4个字节 char 2个字节 大数据不能赋值给小数据 需要强转
//byte、short范围均有正负范围
short s1=99;
char c3=(char) s1;//short 短整型,2个字节 需要强转
byte s2=100;
char c4=(char) s2;//byte 1个字节 也需要强转

转义字符()

字符 ’ ’ [单引号]
字符串 " " [双引号]

对于不方便输出的字符,采用转义字符表示

退格(\b)
换行(\n)
回车(\r)
制表符(\t)
双引号(\")
单引号(\')
反斜杠(\)

//转义字符(\) 对于不方便输出的字符,采用转义字符表示
//退格(\b) 换行(\n) 回车(\r) 制表符(\t) 
//双引号(\") 单引号(\') 反斜杠(\\)
char k1='\\'; //得到\
char k2='\'';//得到'
char k3='\"';//得到"
char k4='\b';//得到退格

通过c1=‘a’,输出26个字符

'a’直接当做整型使用

//方法一
for (int i=c1;i<='z';i++)
     System.out.print((char) i+" "); //强制转换
System.out.println();
//方法二
for (int i=0;i<('z'-'a'+1);i++)
    System.out.print(c1++ +" ");
System.out.println();

char ‘1’,‘2’ 得到int 1

两个字符相加或相减可得到一个值 ,赋给int类型

//char '1','2' 得到int 1
int h4='2'-'1';

随机生产一个’A’-'Z’的字符并打印输出

随机生成min-max范围的数字
min+(int)(Math.random()*(max-min+1))
Math.round() 四舍五入
Math.floor()向下去整
Math.ceil()向上去整

int i='A'+(int) (Math.random()*('Z'-'A'+1));
System.out.println((char) i);

double r=Math.random();
 double rnum=r*('Z'-'A'+1)+'A';  //90-65+1=25 所以向上取整
System.out.println((char) Math.ceil(rnum));

boolean类型、

boolean类型只有true/false
不能用0或非0代替

Character、Integer

int Integer
char Character 定义char操作
Character.isLetter 判断是否是字符数字’0-9’
Character.isDigit 判断是否是字符字母(大小写均能)

System.out.println(Character.isDigit('1'));//true
System.out.println(Character.isDigit(4));//false

System.out.println(Character.isLetter('a'));//true
System.out.println(Character.isLetter('A'));//true
System.out.println(Character.isLetter(' '));//false
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值