03 数据类型

数据类型

正文

java语言特色


java是一种强类型语言

强类型语言

要求变量的使用要严格符合规定,所有变量都必须先定义后才能使用

弱类型语言

要求变量的使用要可以不用明确声明类型

java数据类型


在这里插入图片描述

字面整数默认为int类型

  • 在字面整数后面加 Ll 表示long类型

字面小数默认为double类型

  • 在字面小数后面加 Ff 表示float类型
  • 也可以在字面小数后面加 Dd 表示double类型(没必要)

强制类型转化

------------------------------------>byte,short,char> int> long> float> double 
  • 强转转换的格式为: (类型名) 变量名
  • 不能对boolean类型进行类型转换
  • 不能把对象类型转换成不相关类的类型
  • 在把容量大的类型转换为容量小的类型时必须使用强制类型转换
  • 转换的时候可能存在内存溢出,或者精度问题

整数拓展


JDK7新特性,数字之间可以用下划线分割

int a=10_0000_0000;

byte,short,int,long之间的类型转换

  • 高位转向低位时:直接从后截取低位所能接收的位数

    int a=0b0000_0000_0000_0000_1111_1111_1111_1111;
    short b=(short)a;	//此时b为0b1111_1111_1111_1111
    
  • 低位转向高位时:在**符号位后补(与符号位相同的数,符号位为0则补0,符号位为1则补1) **使低位达到高位的位数

    short a=0b0000_0000_1111_1111;
    int b=a;	//此时b为0b0000_0000_0000_0000_0000_0000_1111_1111
    short c=0b1000_0000_1111_1111;
    int d=c;	//此时b为0b1111_1111_1111_1111_1000_0000_1111_1111
    

整数的其他表示方式

int num1=10;		//普通十进制数
int num2=0b10;		//0b或0B开头表示二进制数
int num3=010;		//0开头表示八进制数
int num4=0x10		//0x或0X开头表示十六进制数
  • 任何时候你的整数表达式包含byte,short,char,int及字面量数字,在进行计算以前,所有表达式的类型被提升到整形,然后逐步运算,当遇到大于int类型的变量时转化为更大范围的类型进行运算。换句话说,就是byte,short,char类型变量在运算时被看作int类型,逐步运算,当需要与更大类型的变量进行运算时,才将之前的运算结果转化成对应的类型(下方的实践经历中有具体例子)

  • 当一个整数字面量的值被赋给一个byte,short,char型的变量时,如果字面量的值没有超过对应类型的范围时不会产生错误 (但如果将一个整数字面量作为参数传递给byte,short型的变量时,不论字面量的值有没有超过对应的范围都会产生错误,下方的实践经历中有具体例子)

浮点数拓展


最好完全避免使用浮点数进行比较

double a=0.1;
float b=0.1F;
float c=1/10F;
System.out.println(a==b);	//false
System.out.println(c==b);	//true	 不同类型的浮点数精确度不同,离散的情况也不同
float d=1000000000000001f;
System.out.println(d==d+1);	//true   浮点数会舍入误差

想要精准的浮点数可以通过使用BigDecimal 数学工具类

字符拓展


char可以直接输出时为字符,也可以作为数字参与运算

给字符类型变量赋值超过char范围(0~65535)时需要加上强制转换

char  a=(char)-100; 
char  b=(char)100000;

char与整数的类型转换

  • char类型变量 -> byte类型 截取后8位
  • char类型变量 -> short类型 原样接收
  • char类型变量 -> int类型 全部接收并在最前方补(与符号位/首位相同的数,符号位为0则补0,符号位为1则补1)
  • char类型变量 -> long类型 全部接收并在最前方补(与符号位/首位相同的数,符号位为0则补0,符号位为1则补1)
  • byte类型 -> char类型变量 全部接收并在最前方补(与符号位相同的数,符号位为0则补0,符号位为1则补1)
  • short类型 -> char类型变量 原样接收
  • int类型 -> char类型变量 截取后16位
  • long类型 -> char类型变量 截取后16位

转义字符

作用
\n换行 (0x0a)
\r回车 (0x0d)
\f换页符(0x0c)
\b退格 (0x08)
\0空字符 (0x0)
\s空格 (0x20)
\t制表符
\ "双引号
\ ’单引号
\ \反斜杠
\ddd八进制字符 (ddd)
\uxxxx16进制Unicode字符 (xxxx)
char b='\u0061';        //用转义16进制的方式表示'a'
System.out.println(b);  // a
char d='\141';			//用转义8进制的方式表示'a'
System.out.println(d);	// a

实践经历

字符与字符串

"a"//这是一个字符串
'a'//这是一个字符
String 不能接收''包裹的数据
//即 char a="a";是错误的
char 不能接收""包裹的数据
//即 String b='a';是错误的

运算过程中数据类型的自动转化

public static void main(String[] args){
    int a=10_0000_0000;
    int b=10;
    long c=100L;
    //a先与b相乘,两者均为int,所以运算结果也为int,但是运算结果超出int范围,溢出,然后再与c	   //相乘,结果为141006540800
    System.out.println(a*b*c);  //141006540800
    //a先与c相乘,由于一方为long,所以两者转化为long后运算,运算结果为long类型,不会溢出,然     //后再与b相乘,结果为1000000000000
    System.out.println(a*c*b);  //1000000000000
}

byte与short类型参数的传参

public static void main(String[] args){
        f((byte)3);//必须使用强制转换,字面值3默认为int
}
public static void f(byte a){
    System.out.println(a);
}

long类型变量的赋值

public static void main(String[] args){
        long a=5455455545555555L;//如果不加L,则会报错,一个字面整数默认为int,需加L声明为long类型
        System.out.println(a);	 //最好是加大写的L
    }

n(a);
}


**long类型变量的赋值**

```java
public static void main(String[] args){
        long a=5455455545555555L;//如果不加L,则会报错,一个字面整数默认为int,需加L声明为long类型
        System.out.println(a);	 //最好是加大写的L
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天才东西

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值