day02【数据类型转换、运算符、方法入门】
day02【数据类型转换、运算符、方法入门】
一、数据类型转换
Java程序要求参与计算的数据的数据类型必须一致,如果数据类型不一致需要进行类型转换。
自动转换
自动转换:将取值范围小的类型自动提升为取值范围大的类型。
比如:int类型与byte类型之间进行加法运算,结果是int类型。代码示例如下:
public class AutomaticTransfer { public static void main(String[] args) { int intNumber = 1; byte byteNumber = 2; // byte number = intNumber + byteNumber;// 报错,结果是int类型,不能直接赋值为byte类型 // int类型和byte类型运算,结果是int类型 int number =intNumber + byteNumber; System.out.println(number); } }
转换规则
范围小的类型向范围大的类型提升,byte、short、char运算时直接提升为int。从左到右从小到大,具体如下:
byte、short、char‐‐>int‐‐>long‐‐>float‐‐>double
强制转换
强制类型转换:将取值范围大的类型强制转换成取值范围小的类型 。
比较而言,自动转换是Java自动执行的,而强制转换需要我们自己手动执行。
转换格式:数据类型 变量名 = (数据类型)被转数据值;
举例:
// 浮点数默认是double类型,double类型数据强制转成int类型,直接去掉小数点 int i = (int)1.5;
注意!
- 浮点转成整数,直接去掉小数,可能造成数据损失精度。
- 取值范围大的类型强转取值范围小的类型,可能造成结果错误。因为大大类型的取值可能超出了小类型的最大值。举例代码如下:
// 强制转换 public class Coercion { public static void main(String[] args) { // shortNumber赋值为short类型最大值 short shortNumber = 32767; // 运算后,结果本来为int类型的32777,超过了short类型的最大值,强制转换,砍掉2个字节后会出现不确定的结果 shortNumber = (short)(shortNumber + 10); System.out.println(shortNumber); } }
ASCII编码表
编码表 :就是将人类的文字和一个十进制数进行对应起来组成一张表格。
将所有的英文字母,数字,符号、汉字都和十进制进行了对应,因此产生了世界上第一张编码表ASCII( American Standard Code for Information Interchange 美国标准信息交换码)。
常见的字符和数字对应关系如下:
注意:在char类型和int类型计算的过程中,char类型的字符先查询编码表,得到97,再和1求和,结果为98。char类型提升 为了int类型。char类型内存2个字节,int类型内存4个字节。
将字符转化为对应数字,示例代码:
public class CharacterToNumber { public static void main(String[] args) { // 输出ASCII码表中字符与数值的对应关系 System.out.println("ASCII码表数值与字符的对应关系:"); // familyNameSymbol表示姓氏字符,以下类推。numberSymbol:数字字符、letterSymbol:字母字符 char familyNameSymbol = '刘'; System.out.println("字符'刘'对应的数值为:"+(int)familyNameSymbol); char numberSymbol = '6'; System.out.println("字符'6'对应的数值为:"+(int)numberSymbol); char letterSymbol = 'a'; System.out.println("字符'a'对应的数值为:"+(int)letterSymbol); } }
输入任意字符得到对应数字的代码:
public class AnyCharacterToNumber { public static void main(String[] args) { // 在anyCharacterToNumber中输入任意字符,执行即可得到对应的数字 anyCharacterToNumber('A'); anyCharacterToNumber('z'); } public static void anyCharacterToNumber(char symbol){ System.out.println("字符'"+symbol+"'对应的数值为:"+(int)symbol); } }
运算符
算数运算符
Java中,整数使用以上运算符,无论怎么计算,也不会得到小数。
public class IntArithmetic { public static void main(String[] args) { int number = 1234; System.out.println(number/1000*1000);// 计算结果是1000 } }
++ 运算,变量自己增长1。反之, – 运算,变量自己减少1,用法与 ++ 一致。
变量在独立运算时, 前++ 和 后++ 没有区别。如:number++、++number。
和其他变量放在一起混合运算时, 前++ 和 后++ 就产生了不同。
- 变量 前++ :++number,变量number自己加1,将加1后的结果赋值给number2,也就是说number先计算。number和number2的结果都是2。
- 变量 后++ :number++,变量number先把自己的值1,赋值给变量number2,此时变量number2的值就是1,变量number自己再加1。number的结果是2,number2的结果是1。
public class AutoArithmetic { public static void main(String[] args) { // ++、--用法一致 // 混合运算时,++在前,先自增1再把自增结果运算 int number = 1; int number2 = ++number; System.out.println(number);// number=2 System.out.println(number2);// number2=2 // 混合运算时,++在后,先运算后自增1 int number3 = 1; int number4 = number3++; System.out.println(number3);// number3=2 System.out.println(number4);// number4=1 } }
+符号在字符串中的操作:+符号在遇到字符串的时候,表示连接、拼接的含义。“a”+"b"的结果是“ab”,连接含义。
public class StringConnect { public static void main(String[] args) { System.out.println("5"+5+5);// 数值相加结果为15,但是这是字符串拼接结果为:555 } }
赋值运算符
赋值运算符,就是将符号右边的值,赋给左边的变量。
public class AssigningOperator { public static void main(String[] args) { int number = 5; number+=6;// 计算方式:number = number + 6; System.out.println(number);// 输入结果是11 } }
比较运算符
比较运算符,是两个数据之间进行比较的运算,运算结果都是布尔值 true 或者 false 。
public class ComparisonOperator { public static void main(String[] args) { System.out.println(1 == 1);// true System.out.println(1 > 1);// false System.out.println(1 < 1);// false System.out.println(1 >= 1);// true System.out.println(1 <= 1);// true System.out.println(1 != 1);// false } }
逻辑运算符
逻辑运算符,是用来连接两个布尔类型结果的运算符,运算结果都是布尔值 true 或者 false。
public class LogicalOperator { 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);// false System.out.println(false || true);// true System.out.println(true || false);// true,右边不计算 System.out.println(!false);//true } }
三元运算符
三元运算符格式:数据类型 变量名 = 布尔类型表达式?结果1:结果2
三元运算符计算方式:
- 布尔类型表达式结果是true,三元运算符整体结果为结果1,赋值给变量。
- 布尔类型表达式结果是false,三元运算符整体结果为结果2,赋值给变量。
public class TernaryOperator { public static void main(String[] args) { int number = (1 == 2 ? 100 :200); System.out.println(number);// 200 int number2 = (3 <= 4 ? 500 :600); System.out.println(number2);// 500 } }
方法入门
概述
方法:就是将一个功能抽取出来,把代码单独定义在一个大括号内,形成一个单独的功能。
当我们需要这个功能的时候,就可以去调用。这样即实现了代码的复用性,也解决了代码冗余的现象。
方法的定义
定义格式:
修饰符 返回值类型 方法名 (参数列表){ 代码。。。 return ; }
定义格式解释:
- 修饰符: 目前固定写法 public static 。
- 返回值类型: 目前固定写法 void ,其他返回值类型在后面的课程讲解。
- 方法名:为我们定义的方法起名,满足标识符的规范,用来调用方法。
- 参数列表: 目前无参数, 带有参数的方法在后面的课程讲解。
- return:方法结束。因为返回值类型是void,方法大括号内的return可以不写。
举例:
public static void methodName(){ System.out.println("这是一个方法"); }
方法的调用
方法在定义完毕后,方法不会自己运行,必须被调用才能执行,我们可以在主方法main中来调用我们自己定义好的方法。在 主方法中,直接写要调用的方法名字就可以调用了。
public class CallingMethod { public static void main(String[] args) { // 调用定义的方法method method(); } public static void method(){ System.out.println("自己定义的方法,需要被main调用运行"); } }
调用练习
将三元运算符代码抽取到自定义的方法中,并调用。
public class UseMethod { public static void main(String[] args) { // 调用定义的方法operator operator(); } // 定义方法,方法中定义三元运算符 public static void operator() { int number = (1 == 2 ? 100 :200); System.out.println(number);// 200 int number2 = (3 <= 4 ? 500 :600); System.out.println(number2);// 500 } }
注意事项
- 方法必须定义在一个类里面
- 方法不能定义在其他个方法的里面
扩展知识点
+=符号的扩展
+= 是一个运算符,只运算一次,并带有强制转换的特点, 也就是说 s += 1 就是 s = (数据类型)(s + 1)。
但是, s=s+1进行两次运算,s+1的结果是int类型,再赋值就会出现类型不一样的报错。因为没有使用强制转换,所以与s += 1是不一样的。所以如下程序使用s += 1能通过,使用 s=s+1则不行。
public class Extension { public static void main(String[] args) { short number = 1; number += 1; // number = number + 1;程序报错,此时运算结果是int类型,又没有进行强制转换 System.out.println(number);// 结果为2 } }
再次强调,数值运算强制转换可能出现问题:1、小数被去掉,精度丢失。2、超过小类型的最大值的运算,导致结果错误。
常量和变量的运算
请分析下面的程序
public class Extension { public static void main(String[] args) { byte number1 = 1; byte number2 = 2; byte number3 = 1 + 2; byte number4 = number1 + number2; System.out.println(number3); System.out.println(number4); } }
分析: number3 = 1 + 2 , 1 和 2 是常量,为固定不变的数据,在编译的时候(编译器javac),已经确定了 1+2 的结果并没 有超过byte类型的取值范围,可以赋值给变量 number3 ,因此 number3=1 + 2 是正确的。
反之, number4 = number1 + number2 , number1 和 number2 是变量,变量的值是可能变化的,在编译的时候,编译器javac不确定number1+number2的结果是什 么,因此会将结果以int类型进行处理,int类型不能赋值给byte类型,因此编译失败。
- day02 【数据类型转换、运算符、方法入门】
- javaSE基础笔记_Day02_数据类型转换、运算符及方法入门
- day02 【数据类型转换、运算符、方法入门】
- Day02 数据类型转换、运算符、方法入门
- day02【数据类型转换、运算符、方法入门】
- 第二章【数据类型转换、运算符、方法入门】
- JAVA入门02——数据类型转换、运算符、方法入门
- Java基础code_数据类型转换、运算符、方法入门
- Java基础【数据类型转换、运算符、方法入门】
- Java基础第二天(数据类型转换、运算符、方法入门)
- JAVA基础知识点汇总【入门程序、常量、变量、数据类型转换、运算符、方法入门、流程控制语句、IDEA、方法、数组、类与对象、封装、构造方法】
- 【Java基础知识回顾】 || 02 _数据类型转换、运算符、方法入门
- JAVA每日学习(补录 OneNote笔记)Day2---数据类型转换、运算符、方法入门、JDK9新特性
- Java之数据类型转换,运算符,方法入门
- Java基础语法02(数据类型转换、运算符、方法入门)
- 数据类型的转换,运算符和方法入门
- Java_Basic_Day02-类型转换+运算符+方法
- 17.2015.08.04第十八节课 C#2 (数值类型及调用、引用类型及调用、装拆箱、常量、变量、数据类型转换、算术运算符、赋值运算符、关系运算符、逻辑运算符、字符串的常用方法)
- JAVA菜鸟入门篇 - 数据类型转换、运算符(四)
- Python (3)python中的数据类型转换,运算和运算符,数据类型检测方法