Java基础知识---数据类型转换

JAVA基础知识

第一阶段JAVASE DAY2

1.关键字

关键字是JAVA预定义好的

  • 由小写字母组成

  • 不能用于标识符

  • 目前有50个关键字,const,goto定义删除了,因为其他语言有,所以保留关键字

2.标识符

给包、类、变量、方法、常量起名字

2.1标识符的命名规则

  1. 见名知意,用英文命名,可以缩写但要合理缩写
  2. 大小写区分
  3. 由字母 、数字 、_ 、$ 组成
  4. 不能用数字开头
  5. 不能用关键字命名

2.2开发中常用的命名规则

**包:**用公司域名反着写 eg:com.baidu.Test

类: 所有单词首字母大写

接口: I + 所有单词首字母大写

接口实现类: 所有单词首字母大写 + Impl

抽象类: Abs + 所有单词字母大写

变量: 第一个单词首字母小写,其余单词首字母大写

方法: 第一个单词首字母小写,其余单词首字母大写(开头用动词)

常量: 单词所有字母大写,用”_“分开 eg:XXX_XXX

3.注释

概念:注释是对代码进行解释,编译器不对注释进行编译

3.1注释的好处

  • 提高代码的可读性

  • 便于项目交接

  • 用于调试

4.常量

4.1常量分类

  • 整数常量

    ​ 进制转换(了解)

    ​ 二进制:由0b开头,0 1组成;

    ​ 八进制:由0开头,0-7组成;

    ​ 十进制:系统默认十进制;

    ​ 十六进制:由0x开头,0-9,A-F组成;

  • 小数常量

    ​ double型:0.25D

    ​ float型:0.25F

  • 布尔常量

    ​ 只有ture false

  • 字符常

  • 字符串常量

  • null常量

  • 自定义常量

5.变量

JAVA是强类型语言,每一种数据都提供相应的数据类型。 eg:int short long …

JavaScript是弱类型语言,只有一种数据类型声明 " var ",浏览器不适用强类型,容易报错崩溃

5.1数据类型分类

整数类型字节数取值范围
byte1-128 ~ 127
short2-32768 ~ 32767
int4-2^31 ~ 2^31
long8-2^63 ~ 2^63
浮点数类型(小数类型)
float4-3.403E38 ~ 3.403E38
double8-1.798E308~1.798E308
布尔类型
boolean1ture/false
字符类型
char20 ~ 65535
引用数据类型类 接口 数组

字符:97:a ; 48:0 ; 65:A

同样是4/8字节为什么浮点型的数据范围更大?

  • 因为小数和整数的存储方式不一样
5.2————————面试题
  1. String是基本数据类型吗?

    ​ 不是,引用数据类型

  2. 说一说Java的数据类型

    ​ 八大基本数据类型:byte short int long float double char boolean;

    ​ 引用数据类型:类 接口 数组;

  3. .数组是什么类型?

    ​ 引用数据类型

6.数据类型转换

数据类型转换依据取值范围 : byte > short > int > long > float > doubule ; char和byte short是交集

在这里插入图片描述

6.1数据转换的9种情况

  1. 自动类型转换

    ​ 将小类型的数据转换成大类型数据,系统会自动转换

    double d = 2.5f;
    		System.out.println(d);
    //小类型数据转换大类型数据不会报错
    
  2. 强制类型转换

    ​ 将大类型的数据转换成小类型的数据,会编译报错
    ​ 解决办法: 强制类型转换

    //系统默认是double数据类型,所以大数据类型转小数据会报错
    float f = 2.5;
    System.out.println(f);
    
    //解决方案:强制类型转换;
    float f = (float)2.5;
    System.out.println(f);
    
    //精度丢失
    int i = (int)2.5;
    System.out.println(i);
    
    // 数据溢出 byte是循环的,当超出数据范围就去到另一端
    byte by = (byte)130;
    System.out.println(by); // -128 -127 -126
    
  3. byte/short/char特例

    ​ 不需要强制转换的情形

    byte by2 = 35;// 编译器发现35正好在byte的范围之内,所以特殊情况,允许通过编译
    System.out.println(by2);
    		
    short s = 32767;
    System.out.println(s);
    		
    char ch = 65; // 97正好在char的范围之内0~65535
    System.out.println(ch);
    
  4. byte/short 和 char 参与转换,都需要强制类型转换

    ​ 因为byte和char,short和char的数据范围是交集,所以没办法判断数据类型大小

    byte by3 = 97;
    char ch2 = (char)by3;
    System.out.println(ch2);
    		
    char ch3 = 'A';
    byte by4 = (byte)ch3;
    System.out.println(by4);
    
  5. 表达式类型提升
    当表达式的运算符两边类型不一致的时候,结果的类型会自动向高类型转换

    float f2 = 2.5f;
    int i1 = 10;
    int i2 = (int)(i1 + f2);//因为是float数据类型,所以需要强制转换为int类型
    System.out.println(i2);
    
  6. 当byte short char 之间参与运算的时候,底层都会转换成int类型来计算

    byte by5 = 10;
    short ss = 20;
    short ss2 = (short)(by5 + ss);
    System.out.println(ss2);
    
  7. boolean类型不能够参与运算和转换

  8. 字符串在参与运算中的转换问题,字符串相加是拼接操作

    String str = "abc";
    str = str + 1;
    System.out.println(str);	
    System.out.println(2 + 2 + "222" + 2 + 2); 
    // 结果是:422222
    
  9. 变量计算和常量计算问题
    变量相加,系统无法判断具体的结果
    常量相加,在编译时期,系统就会运算结果

    char ch4 = 'a';
    byte by6 = 1;
    char ch5 = ch4 + by6; 
    System.out.println(ch5);
    //报错,是变量相加
    
    char ch4 = 'a';
    byte by6 = 1;
    char ch5 = 'a' + 1; 
    System.out.println(ch5);
    //通过,常量相加在编译系统已经计算出运算结果
    

7.运算符

7.1技巧:分离各位数字

数字:1234
	分离个位: 1234 / 1 % 10
	分离十位: 1234 / 10 % 10
	分离百位: 1234 / 100 % 10
	分离千位: 1234 / 1000 % 10

7.2自增自减运算符 ”++ --“

参与运算时,指的是当前的运算,而不是整个计算式

7.2.1————————面试题
int i = 5;
int i1 = (i++) + (++i) * (i--);
//问i1等于多少?

//虽然先乘法再加法,但i++的判断不会有影响,从左往右
//第一步:5 + (++i) * (i--) ; i = 6
//第二步:5 + 7 * 7 ; i =6 -> i = 7 -> i = 6
//结果是:54

7.3赋值运算符

赋值运算符:= ; 扩展扩展赋值运算符:+= -= *= /= %= ;

7.3.1————————面试题
  1. short s1 = 1; s1 = s1 + 1;有什么错?

  2. short s1 = 1; s1 += 1;有什么错??

答案:

1.报错,因为数据类型是int,大类型数据转小类型数据需要强制转换

2.不报错,因为扩展赋值运算符系统会自动强制转换数据类型,所以类型已经是short了

7.4技巧:交换两个数的两种方法
//1.定义中间变量temp
int x = 10;
int y = 20;
int temp = x;
int x = y;
int y = temp;

//2.使用异或来进行交换两个数的位置
int a = 10;
int b = 20;
a = a ^ b;
b = a ^ b;// (a ^ b) ^ b ;
a = a ^ b;// (a ^ b) ^ a ;(b已经等于了)
//一个数值对另一个数值进行两次异或,那么数值本身不做任何改变。

7.5逻辑运算符

  • &:按位与
  • |:按位或
  • ^:异或(相同为false,不同为true
  • &&:短路与
  • ||:短路或
  • !:非
7.5.1————————面试题

& 和 && 的区别?

答案:

&在所有时候都会计算运算符两边的的式子

&&有短路功能,当运算符左边的式子为false,则终止运算。

eg:下列代码是否报错?

int a = 10;
int b = 20;
System.out.println(a > b && (10 / 0) == 0);
//不报错,因为a > b,为false,发生短路,后面的式子(10 / 0)不进行计算

" | " 和 " || " 的区别?

答案:

| : 在所有时候都会计算运算符两边的的式子

|| : 有短路功能,当运算符左边的式子为true,则终止运算。

7.6条件运算符(三目运算符)

格式:X ? Y : Z ;

当X为true,则表达式结果为Y ; 当X为false,则表达式结果为Z。

7.7运算符的优先级

  • 算数运算符(* / % > + - ) > 关系运算符 (> < … > == != ) > 逻辑运算符(& && | || ^) > 条件运算符(三目运算符) > 赋值运算符
  • 一目运算符 > 二目运算符 > 三目运算符
  • 括号内的优先
  • 优先级相同,从左往右
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值