java变量、数据类型和运算符-3

简介: 事实上,自动类型转换并非所有情况下都有效。如果不满足上述条件,当必须将double类型变量的值赋给一个int类型变量时,该如何进行转换呢?这时系统就不会完成自动类型转换了。

2)强制数据类型转换


事实上,自动类型转换并非所有情况下都有效。如果不满足上述条件,当必须将double类型变量的值赋给一个int类型变量时,该如何进行转换呢?这时系统就不会完成自动类型转换了。


问题:去年Apple笔记本所占的市场份额是20%,今年增长的市场份额是9.8%,求今年所占的份额?


分析:不难发现计算的方法并不难,原有市场份额加上增长的市场份额便是现在所占的市场份额。因此,可以声明一个int类型变量before来存储去年的市场份额,一个double类型变量rise来存储增长的部分。但是如果直接将这两个变量的值相加,然后将计算结果直接赋给一个int类型变量now会提示出现问题吗?尝试后会发现IDEA会提示 “类型不匹配” 的错误信息。


示例5


代码:


package cn.dbit.demo;


public class TypeChange {
    public static void main(String[] args) {
        int before = 20;
        double rise = 9.8;
        int now = before + (int)rise;
        System.out.println("新的市场份额是:" + now);
    }
}


分析:


package cn.dbit.demo;

public class TypeChange {
    public static void main(String[] args) {
        int before = 20;           //Apple 笔记本市场份额
        double rise = 9.8;         //增长的份额
//计算新的市场份额 (double 类型变量强制转化成 int 类型变量)
        int now = before + (int)rise;     //现在的份额
        System.out.println("新的市场份额是:" + now);
    }
}


示例5给出了解决方案,示例5的运行结果如下。


新的市场份额是: 29


根据类型提升规则,表达式(before + rise)的值应该是double类型,但是最后的结果却要转变成int类型,赋给int类型变量now。由于不能进行放大转换,因此必须进行显式地强制类型转换。


语法:


 


(数据类型)表达式


在变量前加上括号,括号中的类型就是要强制转换成的类型。例如:


double d = 34.5634;

int b = (int)d;


运行后b的值如下:


34


从示例中可以看出.,由于强制类型转换往往是从宽度大的类型转换成宽度小的类型,使数值损失了精度(如2.3变成了 2,34.5634变成了 34),因此可以形象地称这种转换为 "缩小转换"。


小结:数据类型转换的形式分为自动数据类型转换和强制数据类型转换两种。


2.2.4 boolean 类型


前面已经学习了一些数据类型,有表示数字的,有表示字符的,……。但是事物往往还有真假之分,如在判断一件艺术品的时候常说:"这是真的" 或 "这是假的"。另外,也会经常做一些这样的判断,如 "地铁2号线的首发车时间是5:00吗?"、"这次考试成绩在90分之上吗?"、"健身俱乐部的年费低于1000元吗?"等,这些问题都需要经过判断。但答案只能有两个,要么"是"(即真)要么"否"(即假)。程序也一样,有时也需要判断真假。这时就需要一种数据类型,专门用来表示真和假。Java中使用boolean类型表示真假。"boolean" 又称 "布尔",所以我们常说 "布尔类型"。boolean是Java的关键字,所有字母为小写。


表示真假可以用boolean类型,那么怎么表示呢?其实boolean类型有两个值,而且只有这两个值。boolean类型的值如表2-5所示。


表2-5 boolean类型的值


image.png


2.2.5 关系运算符


现在知道了程序用boolean数据类型表示真和假,但是程序如何知道真假呢?程序可以通过比较大小、长短、多少等得知其真假。Java提供了一种可以比较大小、长短、多少等的运算符,这就是关系运算符。表2-6列出了 Java语言中提供的关系运算符。


表 2-6 关系运算符



image.png


从表2-6可以看出,关系运算符是用来做比较运算的,而比较的结果是一个boolean类型的值,要么是真(true),要么是假 (false)。


问题:从控制台输入张三同学的成绩,与李四的成绩( 80分)进行比较,然后输出“张三成绩比李四的成绩高吗? ”这句话的判断结果。


分析:程序要实现的功能可以分为以下两部分。


(1) 实现从键盘获取数据。


(2) 比较数据,并输出比较结果。


示例6


代码:

package cn.dbit.demo;
import java.util.Scanner;
public class BoolTest {
    public static void main(String[] args) {
        int liSi = 80;
        boolean isBig;
        Scanner input = new Scanner(System.in);
        System.out.print("输入学员张三成绩:");
        int zhangSan = input.nextInt();
        isBig = zhangSan > liSi;
        System.out.println("张三成绩比李四高吗?" + isBig);
    }
}


分析:

package cn.dbit.demo;
import java.util.Scanner;
public class BoolTest {
    public static void main(String[] args) {
        int liSi = 80;           //学员李四的成绩
        boolean isBig;           //声明一个 boolean 类型的变量
        Scanner input = new Scanner(System.in);    //Java  输入的一种方法
        System.out.print("输入学员张三成绩:");        //提示要输入学员张三的成绩
        int zhangSan = input.nextInt();          //输入张三的成绩
        isBig = zhangSan > liSi;           //将比较结果保存在 boolean 变量中
        System.out.println("张三成绩比李四高吗?" + isBig);      //输出比较结果
    }
}


程序运行结果如图2.7所示。


图2.7示例6的运行结果


由示例6可见,和所有其他数据类型一样,在使用boolean类型之前,也需要先进行声明和赋值,如下所示。


boolean isBig;


isBig = zhangSan > liSi;


比较结果是一个boolean类型的值,结果为"假",因此示例6的输出结果为false。


注意:”=” 和 “==” 的区别。


(1) “=” 是赋值运算符,即把右边的值赋给 “=” 左边的变量,如int num = 20。


(2) “==” 是比较运算符,即 “左边的值与 “==” 右边的值比较,看它们是否相等,如果相等则为true, 否则为false,如3==4的结果为false。


小结:


(1)到现在为止,已经学过的数据类型和运算符有哪些?自己在纸上写一下,记不起来时可以翻看前面的内容,这些数据类型和运算符在后面的学习中会经常用到。


(2)运算符的优先级:算术运算符>关系运算符>逻辑运算符,即在一个表达式中,算术运算符的优先级最高,关系运算符次之,然后是逻辑运算符。逻辑运算符将在下一章进行学习。如果在一个表达式中包含赋值运算符,则它的优先级最低。当运算符比较多时,可以使用小括号改变某个运算符的执行顺序。


2.3 技能训练


上机练习1


指导——升级“我行我素购物管理系统”,实现购物结算功能


训练要点


运算符(*、=)的使用。

从控制台输出信息。

需求说明


张三的购物清单如表2-7所示。


image.png

相关文章
|
2月前
|
存储 Java Go
【Java】(3)8种基本数据类型的分析、数据类型转换规则、转义字符的列举
牢记类型转换规则在脑海中将编译和运行两个阶段分开,这是两个不同的阶段,不要弄混!
193 2
|
2月前
|
Java Go 开发工具
【Java】(4)五种运算符的说明(&&、||、>=、>、<=、<)、4种控制语句(if、for、while、dowhile)、输入和输出说明
扩展类的赋值运算符不改变运算结果类型,假设最初这个变量的的类型byte类型,无论怎么进行加或追减,最终该变量的数据类型还是byte类型。注:一个表达式中有多个运算符,运算符有优先级,不确定的加小括号,优先级得到提升。当布尔表达式的结果是false的时候,选择表达式2作为整个表达式的执行结果。当布尔表达式的结果是true的时候,选择表达式1作为整个表达式的执行结果。当用户输入的时候,并且最终敲回车键的时候,键入的信息会自动赋值给a。并且,连接运算之后的结果还是一个字符串类型。表达式1 : 表达式2。
140 1
|
2月前
|
Java Go 开发工具
【Java】(2)Java数据类型阐述、基本数据类型的占用和范围、二进制的讲述
数据的一种表示形式。十进制表示满十进一原则。二进制表示满二进一原则。例如:十进制例如:二进制计算机在任何情况下都只能识别二进制。
121 1
|
3月前
|
安全 Java
使用Java多态性进行数据类型转换
以上示范了如何通过多态性来执行安全有效地对于Java对象间相互之间进行正确方式与场合下正确格式与条件限定内对于各个层级关系内部成员及其功能调取与应有操作处理过程,并通过 `instanceof`关键字确保了程序运行期间遵循逻辑合理并符合预设规则条件限定内正常工作流程而无需担忧潜藏风险问题出现可能带来影响结果质量问题情况存在可能。
123 12
|
9月前
|
存储 Java
# 【Java全栈学习笔记-U1-day02】变量+数据类型+运算符
本篇笔记主要围绕Java全栈学习的第二天内容展开,涵盖了变量、数据类型、运算符以及Scanner类的应用。首先介绍了变量的概念与命名规范,以及如何定义和使用变量;接着详细讲解了Java中的基本数据类型,包括整型、浮点型、字符型、布尔型等,并通过实例演示了数据类型的运用。随后,深入探讨了各类运算符(赋值、算术、关系、逻辑)及其优先级,帮助理解表达式的构成。最后,介绍了如何利用Scanner类实现用户输入功能,并通过多个综合示例(如计算圆面积、购物打折、变量交换及银行利息计算)巩固所学知识。完成相关作业将进一步加深对这些基础概念的理解与实践能力。
159 13
|
4月前
|
存储 缓存 算法
Java数据类型与运算符深度解析
本文深入解析Java中容易混淆的基础知识,包括八大基本数据类型(如int、Integer)、自动装箱与拆箱机制,以及运算符(如&与&&)的使用区别。通过代码示例剖析内存布局、取值范围及常见陷阱,帮助开发者写出更高效、健壮的代码,并附有面试高频问题解析,夯实基础。
|
5月前
|
存储 人工智能 JavaScript
Java中的数据类型转换
本文介绍了 Java 中常见的数据类型转换方法,涵盖字符串与整型、长整型、浮点型、布尔型及日期类型的相互转换,并讲解了可能出现的异常和处理方式。
247 0
|
6月前
|
人工智能 Java
Java运算符中的隐式转换
本文介绍了 Java 运算符中的隐式类型转换规则,涵盖算数、逻辑、位、关系、赋值及其他运算符。重点分析了算数和位运算符在处理小于 int 位长的数据时会自动转换为 int 类型的特性,并通过代码示例说明可能引发的类型不匹配错误。逻辑、关系、赋值及其他运算符则不涉及类型转换。总结指出,部分运算符在计算时会将小位长数据隐式转为 int 类型,结果也为 int。
|
6月前
|
人工智能 Rust Java
Java中的算数、关系、逻辑、条件、赋值 五大运算符详解
本文介绍了Java中的运算符及其优先级,包括算数运算符(如+、-、*、/、%、++、--)、关系运算符(如<、>、==、!=)、逻辑运算符(如&&、||、!)、条件运算符(三目运算符)和赋值运算符(如=、+=、-=等)。详细解释了每种运算符的功能与用法,例如自增自减运算符的特点、逻辑运算符的短路法运算以及位运算符的操作规则。最后还提供了运算符优先级表格,帮助开发者理解复杂表达式的计算顺序。文中提醒,在实际开发中,建议使用括号明确运算顺序以提高代码可读性。
289 0
|
9月前
|
SQL IDE 算法
《从头开始学java,一天一个知识点》之:运算符与表达式:算术、比较和逻辑运算
**你是否也经历过这些崩溃瞬间?** - 看了三天教程,连`i++`和`++i`的区别都说不清 - 面试时被追问"`a==b`和`equals()`的区别",大脑突然空白 - 写出的代码总是莫名报NPE,却不知道问题出在哪个运算符 这个系列为你打造Java「速效救心丸」,每天1分钟,地铁通勤、午休间隙即可完成学习。直击高频考点和实际开发中的「坑位」,拒绝冗长概念,每篇都有可运行的代码示例。明日预告:《控制流程:if-else条件语句实战》。
190 6