[JavaSE-02]数据类型、运算符和方法

1、类型转换

  在[Java-SE复习笔记系列-01]基本常识最后小节谈到了JAVA的整数和浮点数的设定,在赋值过程中存在自动类型转换,在计算式要保证参与的计算数据类型要一致,当不一致时会发生类型转换,转换主要分为强制类型转换和自动类型转换。

2.1 自动转换

  自动转换指的是把取值范围小的类型自动提升为取值范围大的类型(理解为小瓶子的水倒进大瓶子里),下面举几个例子:

public static void main(String[] args){
	int i = 2;
	byte b = 3;
	int j = b + i;
	System.out.println(j);
}

  分析这段代码,i是int型,b是byte型,i+b进行了求和运算,计算要求数据类型一致,所以会自动把byte类型(1个字节)的b提升为int类型(4个字节),计算后的数字为int类型,然后赋值给j。
在这里插入图片描述
  同理,当一个int类型和一个double类型进行运算时,会把int类型提升为double然后进行计算,举例如下:

public static void main(String[] args){
	int i = 1;
	double d = 2.5;
	double e = d + i;
	System.out.println(e);
}

  转换规则为:范围小的类型会自动向范围大的类型提升,byte、short、char运算时提升为int。

byteshortchar--->int--->long--->float--->double

2.2 强制转换

  强制转换就是要手动进行转换,编译器不会自动进行转换,比如把1.5赋值给int类型会报错,因为1.5是double类型,根据上面的自动转换规则,不会自动转换为int类型。
  强制类型转换也可以理解为大瓶子(取值范围大的类型)里的水(数据值)要倒进小瓶子(取值范围小的类型)里,当大瓶子的水体积大于小瓶子的容量时,会导致数据溢出;当大瓶子里的水体积小于小瓶子的容量时,数据值不变,只是类型变了。格式如下:

//数据类型 变量名 = (数据类型) 被转数据值;
public static void main(String[] args) {
	int i = (int) 20.3;	//20.3为double类型,内存中占8个字节,赋值后i的值为20
	int j = (int) 40.0;	//复制后j的值为40     
    short s = 1;	//short类型变量在内存中占2个字节
    /*
		出现编译失败
		s和1做运算的时候,1是int类型,s会被提升为int类型
		s+1后的结果是int类型,将结果在赋值会short类型时因为不满足自动转换规则而发生错误
		short内存2个字节,int类型4个字节
		必须将int强制转成short才能完成赋值
	*/
     s = s + 1//编译失败
     s = (short)(s+1);//编译成功
}

在这里插入图片描述
  一般做强制类型转换要极其注意转换后数据精度是否会损失的问题,比例当把浮点数强制转换为整数时,会直接丢失小数部分。int类型转换为short会砍掉2个字节。

// 定义s为short范围内最大值
short s = 32767;
// 运算后,强制转换,砍掉2个字节后不会出现预计的结果
s = (short)(s + 10);	//赋值后s值为-32759,不是逻辑中想要的32777

2、 ASCII码表以及int和char的运行原理

  因为计算机只认识二进制的0、1数据,为了能够处理人类认识的文字问题,产生了编码表。所谓编码就是把人类能看的懂的转换成计算机看得懂的,解码就是反过来。编码表就是这个对照表,比如要表示一个字母a,就用十进制数字97表示,通过ASCII编码表查到97对应字母a。
  ASCII码表的全部内容百度即可查询,这里我们只需要记住三个最关键的数字:65(’A‘)、97(’a‘)、48(’0‘)即可,比如我们想知道字符D,只需要想起来字符A是65,然后加3就知道字符D对应68。

int i = 3;	//赋值后i数据值为3
char c = 'a';	//赋值后c对应字符为’a‘
char c1 = (char)(c + i);	//赋值加转换后c1对应字符为’d‘

  在char和int计算过程中,根据自动转换规则,计算结果为int类型,所以计算之前要把char转换为int类型,char首先通过ASCII码表查询字符’a’对应着数字97,于是c+i实际是97+3,计算得到100为int类型,再通过强制类型转为char类型,c1就对应着’d‘。

3、++和- -计算方式

  只需要记住一句话,++在前则先加后用,++在后则先用后加,- -同理。下面通过几个例子来说明:

//demo01
public static void main(String[] args) {
	int a = 1;
    int b = ++a;	//先加后用,a先变成2,然后2赋值给b
    System.out.println(a);//计算结果是2
    System.out.println(b);//计算结果是2
}

//demo02
public static void main(String[] args) {
    int a = 1;
    int b = a++;	//先用后加,a先赋值给b,然后a加1
    System.out.println(a);//计算结果是2
    System.out.println(b);//计算结果是1
}

4、符号+在字符串中的作用

  在数字计算中的+就是我们日常生活中的加法,对于字符串,则是拼接的作用:

//demo01
public static void main(String[] args){
	//字符串加int类型,首先把int类型转为字符串,然后拼接 
	//输出:5+5=55
	System.out.println("5+5="+5+5);
}

//demo02
public static void main(String[] args){
	//有括号先算括号
	//输出:5+5=10 
	System.out.println("5+5="+(5+5));
}

5、比较运算符和逻辑运算符

比较运算符说明
==等于符号,比较符号两边数据是否相等,相等结果是true。
!=不等于符号 ,如果符号两边的数据不相等,结果是true。
<比较符号左边的数据是否小于右边的数据,如果小于结果是true。
>比较符号左边的数据是否大于右边的数据,如果大于结果是true。
<=比较符号左边的数据是否小于或者等于右边的数据,如果小于结果是true。
>=比较符号左边的数据是否大于或者等于右边的数据,如果小于结果是true。
public static void main(String[] args) {
	System.out.println(1==1);//true
    System.out.println(1<2);//true
    System.out.println(3>4);//false
    System.out.println(3<=4);//true
    System.out.println(3>=4);//false
    System.out.println(3!=4);//true
}
逻辑运算符说明
&&两边都是true,结果才是true;短路特点:符号左边是false,右边不再运算
||至少一边为true,结果就为true;短路特点: 符号左边是true,右边不再运算
!! true结果为false;!false结果为true
public static void main(String[] args)  {
	System.out.println(true && true);//true
    System.out.println(true && false);//false
    System.out.println(false && true);//false,右边不计算
 
    System.out.println(false || false);//falase
    System.out.println(false || true);//true
    System.out.println(true || false);//true,右边不计算
 
    System.out.println(!false);//true
}

6、三元运算符

//基本格式:数据类型 变量名 = 布尔类型表达式?结果1:结果2
public static void main(String[] args) {
    int i = (1==2 ? 100 : 200);	//1==2为false,则取结果2赋值给i,i数据值为200
    System.out.println(i);//200
    int j = (3<=4 ? 500 : 600);	//3<=4为true,则取结果1赋值给j,j数据值为500
    System.out.println(j);//500
}

7、方法

  JAVA的方法就是函数,方法必须定义在一类中方法外,方法不能定义在另一个方法的里面,定义格式为:

修饰符 返回值类型 方法名 (参数列表){
     代码...        
    return ;

8、总结

  数据类型转换分为自动转换和强制转换,占用字节数少的转成多的可以自动转换,反过来就得强制转换。ASCII码表就是一种字节到字符的编码表,int类型和char类型互转就是基于ASCII码表。自增和自减运算符记住一个原则就行,就是在前面就先算后用,在后面就先用后算。三元运算符适合代码逻辑较短的场景,省的写长长的if语句。
  (本章内容为自学笔记,转载请注明来源,有错误地方欢迎评论区指出。)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值