Java学习笔记—— 基本数据类和运算符

基本数据类型

        纯小写英文单词

数据类型存储长度数据范围
byte1 byte[-2^7, 2^7-1]
short2 byte[-2^15, 2^15-1]
int4 byte[-2^31, 2^31-1] 约21亿
long8 byte[-2^63, 2^63-1]
float4 byte[-3.403E38, 3.303E38]
double8 byte[-1.798E308, 1.798E308]
char2 byteUnicode编码
boolean无明确规定true, false
  • bite:比特位,二进制中的每一位就是一个bite位,8 bite可写8个2进制数

    • 1GB = 1024MB = 1024KB = 1024B (bite)

  • byte:字节,计算机的默认存储大小,即表示数据的基本单位,1 byte = 8 bite

  • byte类型:一般用在文件和网络传输中

    ​​​​​​​max: 01111111 --> 2^0*1 + 2^1*1 + ... +2^6*1 = 2^7-1 = 127 java中最高位为符号位,1为负,0为正
  • 描述比long类型还大的数据:用java.math.BigInteger类型

  • 所有的基本类型都有对应的类类型。除int和char外,其他基本类型的包装类都是首字母大写

引用数据类型

字符串类型

        String和char:引用类型和基本类型,分别使用" "和 ' '

转义字符

        当碰到特殊字符时,需要转义输出,即告诉计算机这个符号没有特殊含义,不需特殊处理

变量

        声明之后值还可以修改

  • 变量在定义时可以不赋值,但推荐定义的同时完成初始化

  • 局部变量(在方法中定义的变量)必须赋值后才可使用

命名法则

  • 硬性指标:

        数字、字母、下划线,数字不可开头,大小写敏感。允许中文和美元(不推荐),不允许关键字。

  • 软性指标:

        命名用英文,命名有意义,使用小驼峰命名法(多个单词时,从第二个单词开始首字母大写)

常量

        定义之后值和类型均无法修改,使用final关键字修饰。且所有的字面量也时常量

数据类型转换

        只有相同数据类型之间可以转换

小类型转大类型

        自动提升

  • 小类型变量赋值给大类型 long b = 20; 20由int转为long

  • 小类型和大类型进行数学运算 int +long ==> long+long

大类型转小类型

        强制转换,可能会丢失精度(数据溢出或数据部分丢失)

常见转化

int和byte之间的转化

        对数值型和字符型来说,小于四字节的数据类型,在存储时都会转为四字节,如byte、short、char。这是因为CPU在读写数据时,都是以4字节为单位进行读取和写入的。

byte a = 10;
byte b = 20;
byte c = a + b; //编译不通过,因为a与b会被提升为int类型保存,而int+int ==> int, 当把一个int变量赋值给byte时,无论是否超出范围都需要强制转换

int和char,String之间的转化

  • char --> int: 自动提升(2 --> 4字节),按Unicode编码将字符转成int。可转换原因:计算机内部都是0和1组成的二进制码,char字符会按照不同的编码转为int存储
  • int --> String: 使用字符串连接符 “+” 或 使用String.valueOf(num)
  • String --> int: 调用int包装类Integer.parseInt()方法,转换前提:字符串中只含数字。若字符串中含有非数字,运行出错

运算符

一些坑

整型的溢出

int a = Integer.MAX_VALUE;
a = a + 1

结果:a = -2147483648

原因:01111……11 + 00000……01 = 10000……00

字面量

整型的字面量默认为整型

浮点数字面量类型默认是双精度浮点型

long a = 10L; // L,l表示10是一个long型
System.out.print(10 + 1l); // 11L
System.out.print(1 / 2);   // 0, reason: int/int==>int
double b = 0.1;
float c = 0.1F;  // F,f表float型

浮点数误差

:0.1+0.2结果是0.3?

: 错误,运行结果0.30000000000000004。因为计算机的内部只可存储0和1,浮点数在计算机内部实际上是通过整数模拟的,因此float和double类型数据运算时可能会有误差。

解决方法

  1. 仍使用double,但只将小数点后6位作为有效位

  2. 借助java.math.BigDecimal类型

+ 的用法

+:既可以作为*字符串连接符*,又可以作为*加法运算符*(及正数符号,一般不写)

*注:*对每一个+来说,只要+两边的操作数中有一个操作数是字符串类型,则该+就被当做字符串连接符处理,否则当做加法运算符处理

变量的作用域

变量的定义域是变量定义所在的{}中,出了{}不可用

class Test { 
 public static void main(String[] args) { 
 { 
    int x = 10; 
    System.out.println(x); // 编译通过; 
 } 
    System.out.println(x); // 编译失败, 找不到变量 x. 
 } 
}

一些问题

:为什么同是4字节,float比int表示的范围大?

:底层二进制结构不同

int类型:1个符号位+整数位

float类型:1个符号位+指数位+小数位

:一组数中只有一个数出现一次,其余数均出现两次,如何快速找到只出现了一次的这个数字?如 10 20 10 20 30 40 50 40 50

:因为相同数字之间做异或,值为0,所以给整组数做异或运算有:

10 ^= 20 ^= 10 ^= 20   ==>  0      40 ^= 50 ^= 40 ^= 50   ==>  0    
故    0 ^= 30  ^= 0   ==>  30
  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值