B004-表达式 类型转换 运算符

目录

      • 表达式
      • 数据类型转换
        • 自动转换
        • 强制转换
      • 运算符
        • 数学运算符
        • 自增自减运算符
          • i++与 ++i的区别
        • 赋值运算符
        • 比较运算符
        • 位运算符(了解)
        • 逻辑运算符
        • 三目运算符

表达式

/*** 表达式定义:由常量 变量 运算符 括号组成的算式,为了按照一定的运算规则计算出结果值*  括号能提高运算的优先级 *  1.表达式结果可使用变量接收后用变量打印,也可使用表达式直接打印*  2.只要表达式中有一个是字符串结果就都是用字符串类型接收*/
public class BDSDemo {public static void main(String[] args) {int a = 25;boolean b = true;// 表达式结果可直接打印System.out.println(a + 69 + "你们好" + b + (36 + 45));// 只要表达式中有一个是字符串结果就都是用字符串类型接收String s1 = a + 69 + "你们好" + b + (36 + 45);String s2 = a + 69 + "25" + b + (36 + 45);}
}

数据类型转换

类型转换定义:从一种数据类型转换为另外一种类型
作用:1.节约内存空间;2.转换成项目所需要的类型

基本数据类型排序
(boolean)、byte、char、short、int、long、float、double
char 只有正数范围 [0,2^16-1]

自动转换

在这里插入图片描述

/***   自动转换:从小的类型转换大的类型*   1.布尔类型不参与转换*   2.byte与char之间不能自动转换,因为char只有正数范围    *     char与short之间不能自动转换,因为char正数范围比short大*/
public class TypeTransform {public static void main(String[] args) {//1.如果运算式中元素类型分别属于(byte,short,char,int),那么运算前所有元素类型都将会自动转换为int类型再运算,结果也为int(自动向上转型)byte b = 25;short s = 26;char c = 'A';int i = b+s+c+69;System.out.println("i: "+i);byte b1 = 23;int r = b+b1;//2.long  float  double只要两个操作数中有一个为以上类型,另一个就会被转换成表达式中最大类型,并且结果也为该类型long  x = 36L;float y = 20.0F;float d = x+y;double t = x+y+3.14;float t1 = x+y+3.14F;double t2 = 69+x+y+b+c+s+2.0;//3.char类型向更高长度类型(例如整型)转换时,会转换为对应的ASCII码值,再做其他类型的自动转换char c1 = 'A';int t3 = c1+35;//根据ASCII码值为65  提升为int类型 System.out.println("t3: "+t3);//特例 从大到小(要在小的类型范围中) byte b2 = 36;short s1 = 5798;}}
强制转换
/***   强制转换:从大的类型转换成小的类型     (是为了转换成自己或者项目所需要的的类型)*       语法:强转类型  变量名 = (强转类型)(值或者表达式)*       注意:都是已知转换不会出问题,如果是未知的强制转换就有可能出现精度损失*/
public class TypeTransform2 {public static void main(String[] args) {byte b1 = 120;byte b2 = 3;//正常强制转换byte x1 = (byte)(b1+b2);System.out.println("x1: "+x1);byte b3 = 120;byte b4 = 30;//出现精度损失的强制转换byte x2 = (byte)(b3+b4);System.out.println("x2: "+x2);//byte与char不能自动转换  但是可以强转char c = 65;byte b5 = (byte)c;int i1 = 123;int i2 = 456;//注意强转的时候强转的部分是否为一个整体float d = (float)((i1 + i2) * 1.2);}}

运算符

数学运算符
/***  数学运算符:+(加)   -(减)   *(乘法)   /(除法)   %(取模  求余数)*     作用于常量或者变量*/
public class _04MathSignDemo {public static void main(String[] args) {//加法System.out.println(2+50.0);//减法System.out.println(2-1);//乘法System.out.println(2*2);//除法System.out.println(2/2);//System.out.println(1/0);		//编译只看类型 不会进行运算 所以编译不会报错 运行会报错  因为0不能作为分母System.out.println(1.0/0);		//Infinity  0先提升为double类型  double类无限趋近于这个数字System.out.println(0.0/0);		//NaN  等同于无线趋近于0乘以无限大   not a number  不是一个数System.out.println(10/3);		//3   因为两个都是整数类型 结果也为整数类型 不会保留小数位//取模System.out.println(5%2);		//1}
}
自增自减运算符
/*** 自增运算符:++,只能作用于变量,使变量的值自动增加1* 自减运算符:--,只能作用于变量,使变量的值自动减少1*/
public class _05AutoIncreDemo {public static void main(String[] args) {int i = 2;i++;System.out.println(i);	//3int j = 2;++j;System.out.println(j);	//3int x = 5;x--;System.out.println(x);	//4System.out.println(--x);//3}
}
i++与 ++i的区别
/*** 自增运算符:++,只能作用于变量,使变量的值自动增加1* i++与 ++i的区别:*    i++和++i本身是一个表达式,也具有值* 结论:*    i++表达式的值等于i自增之前的值,i本身的值也会+1*    ++i表达式的值等于i自增之后的值,i本身的值也会+1* 使用的时候 需要注意 到底是使用的是变量的值 还是自增表达式的值*/
public class _06AutoIncreDemo2 {public static void main(String[] args) {int i = 2;System.out.println(i++);	// 2System.out.println("i=" + i);int j = 2;System.out.println(++j);	// 3System.out.println("j=" + j);}
}
public class Practice {public static void main(String[] args) {int i = 3;int a = i++ + i++ + i++;//      3     4     5     i=6int b = ++i + ++i + ++i;//       7     8     9    i=9System.out.println(i);	//9System.out.println( a);	//12System.out.println( b);	//24}
}
+号的特殊使用:
1.基本数据类型之间使用+号全部进行加法运算
2.基本数据类型和引用数据类型之间使用+号2.1如果基本数据类型先使用+号,那么进行加法运算,然后使用+号和字符串进行拼接2.2如果字符串和字符之间使用+号,那么字符不会转换成对应的数值,直接进行拼接		
3.引用数据类型和引用数据类型之间使用+号全部进行拼接如果字符串在最前面,那么后面的全部进行拼接
自增自减运算符符号:  ++    --
注意:  自增自减只能够用于变量,不能用于常量  自增自减运算的优先级比算术运算符高
要点:  把整个表达式看成是一个整体。如果符号在变量名后面,那么整个表达式的值就是原来值不变。如果符号在变量名前面,那么整个表达式的值就是原来的值加1。
赋值运算符
/*** 赋值运算:从右往左*  =  +=  -=  *=  /=  %=*  +=  -=  *=  /=  %= 会存在隐式的自动类型转换*/
public class _08FZSignDemo {public static void main(String[] args) {int x = 6;x += 5;		//可以理解为x=x+5;System.out.println("x: "+x);	//11x -= 6;		//可以理解成x=x-6;System.out.println("x: "+x);	//5byte b1 = 2, b2 = 3;b1 = (byte) (b1 + b2);System.out.println(b1);b1 += b2;	//可以理解成为: b1=b1+b2,有一个隐式的自动类型转换}
}
比较运算符
/*** 比较运算符*  ==(相等)  !=(不等)  >  <  >=  <=*  用来两个常量或者变量或者两个表达式之间的比较*  比较运算的结果为布尔类型*/
public class _09CompareDemo {public static void main(String[] args) {System.out.println(5>3);//trueint a = 5 ,b = 6;System.out.println(a!=b);//trueSystem.out.println(a++>b++);//falseSystem.out.println(a==b);//false}
}
位运算符(了解)
/*** 位运算符(了解)* 主要用来进行二进制的运算,进行位运算之前,首先需要将数据转换为二进制以后再进行运算1. & : 与 位运算,两边为1,结果为1,不同时为1,则结果为02. | : 或 位运算,有一个为1,结果为13. ^ : 异或,两边不一样,就为1,否则为04. ~ : 取反,1变成0,0 变成1    ~(-5)结果45. <<:向左位移动,例如1<<3,   结果8         6. >>:向右位移动,例如8>>2     7. >>>:无符号向右移动*/
public class _10BinSignDemo {public static void main(String[] args) {//&:先转为二进制去算,同时为1则为1,其他都为0System.out.println(2&3);	//结果为二进制的10,  10进制就为2/*  10*  11* ----*  10* *///|:有一个为1 则为1 System.out.println(2|3);	//11=1*2^1+1*2^0=1+2=3//^:两边不一样才为1System.out.println(2^3);	//01  -->1//<<:往左移动3位,补0System.out.println(1<<3);	//1000=1*2^3=8//>>:往右移动3位System.out.println(8>>3);	//1}
}
逻辑运算符
/***  逻辑运算符:*    用来连接两个布尔类型的值或者表达式,运算的最终结果也为布尔类型*  &:与  两个表达式同时为true,则结果为true,否则结果为false*  |:或  只要有一个为true,则逻辑运算结果为true*  !: 取反*  ^:亦或  必须两个不同的时候  逻辑运算才true*  &&:短路与  两个表达式同时为true,则结果为true,第一个为false后面的就不用运行*  ||:短路或  只要有一个为true,逻辑运算结果为true,第一个为true后面的就不用运行*/
public class _11LogicDemo {public static void main(String[] args) {System.out.println(true&true);	//trueSystem.out.println(true&false);	//falseSystem.out.println(true|false);	//trueSystem.out.println(false|false);//falseSystem.out.println(!true);		//falseSystem.out.println(true^false);	//trueSystem.out.println(false^false);//falseSystem.out.println(true^true);	//falseSystem.out.println(true&&true);	//trueSystem.out.println(true&&false);//falseSystem.out.println(true||true);	//trueSystem.out.println(true||false);//true}
}
/***  && 和 & 区别?*   &不具有短路功能,当第一部分为false的时候, 依然会执行第二部分的代码*   &&具有短路功能,当第一部分为false的时候,不会执行第二部分*  | 和 || 区别?*   |不具有短路功能,当第一部分为true时,依然会执行第二部分*   ||具有短路功能,当第一部分为true时,不会执行第二部分*/
public class _12LogicDemo2 {public static void main(String[] args) {int x = 5;System.out.println(3>5 & x++>6);	//falseSystem.out.println(x);	//6int y = 5;System.out.println(3>5 && y++>6);	//falseSystem.out.println(y);	//5	int i = 4;System.out.println(5>3|i++>2);	//trueSystem.out.println(i);	//5int j = 4;System.out.println(5>3||j++>2);	//trueSystem.out.println(j);	//4}
}
三目运算符
/*** 三目运算符:由?和:分隔的三个表达式 * 语法:x?y:z, x:布尔类型的值或者表达式, y和z,一般来说为同种类型的变量 常量或者表达式* 运算流程:当x为true的时候,三目运算的结果为y,否则为z*/
public class _13ThreeEyesDemo {public static void main(String[] args) {// 三目运算String s = false ? "真的" : "假的";System.out.println(s);// 不能使用变量接收 因为编译只看类型 不会运算System.out.println(false ? "真的" : 4);// 		求出a和b两个整数中最大的整数int a = 69, b = 138;System.out.println(a > b ? a : b);// 		求出 a,b,c 三个数中最小的数字// 两两比较 先找出两者中最小的 再将结果和第三个进行比较int x = 9, y = -6, z = -1;int t = x < y ? x : y;int min = t < z ? t : z;System.out.println(min);//		例如小明学习java 考试成绩  >=60 显示 非常优秀   否则输出 还有很大的提升空间。// 定义一个变量 用来存放小明成绩int score = 99;String s2 = score >= 60 ? "非常优秀" : "还有很大提升空间";System.out.println(s2);//		等级分   A B C D ,也是通过三目运算写出结果/** 90~100 A score>=90&&score<=100 * 80~90 B score>=80&&score<90 * 70~80 C score>=70&&score<80 * 60~70 D score>=60&&score<70*/// 三木运算嵌套String s3 = score >= 90 && score <= 100 ? "A" : (score >= 80 && score < 90 ? "B" : (score >= 70 && score < 80 ? "C" : "D"));System.out.println(s3);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/307572.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java中创建多线程的方法

继承Thread类&#xff0c;对该类进行new一个实例&#xff0c;对实例调用start方法&#xff0c;重写run方法。 缺点&#xff1a;单继承&#xff0c;无法继承 public class myThread extends Thread {public static void main(String[] args) {myThread myThread new myThread()…

【机器学习入门】集成学习之梯度提升算法

系列文章目录 第1章 专家系统 第2章 决策树 第3章 神经元和感知机 识别手写数字——感知机 第4章 线性回归 第5章 逻辑斯蒂回归和分类 第5章 支持向量机 第6章 人工神经网络(一) 第6章 人工神经网络(二) 卷积和池化 第6章 使用pytorch进行手写数字识别 实操练习 使用Yolo模型进…

合并单元格的excel文件转换成json数据格式

github地址: https://github.com/CodeWang-Ay/DataProcess 类型1 需求1: 类似于数据格式: https://blog.csdn.net/qq_44072222/article/details/120884158 目标json格式 {"位置": 1, "名称": "nba球员", "国家": "美国"…

项目实战 | 使用python分析Excel销售数据(用groupby)

项目实战 | 使用python分析Excel销售数据 本文目录&#xff1a; 零、00时光宝盒 一、提出问题 二、理解数据 2.1、安装python读取excel文件的库 2.2、查看excel表的字段名和前几行记录 2.3、查看excel表结构 2.4、查看索引 2.5、查看每一列的列表头内容 2.6、查看每一…

AutoCAD 2024 安装注册教程

前言 大家好&#xff0c;我是梁国庆。 本篇分享的安装包是 AutoCAD 的全新版本——AutoCAD 2024&#xff0c;下文安装教程中简称 AutoCAD。 时间&#xff1a;2024年4月8日。 获取 AutoCAD 安装包 我已将本篇所使用的安装包打包上传至百度云&#xff0c;扫描下方二维码关注…

A Learning-Based Approach for IP Geolocation(2010年)

下载地址:Towards IP geolocation using delay and topology measurements | Proceedings of the 6th ACM SIGCOMM conference on Internet measurement 被引次数:185 Eriksson B, Barford P, Sommers J, et al. A learning-based approach for IP geolocation[C]//Passive …

VRRP(虚拟路由冗余协议)详解

VRRP-------虚拟路由冗余协议 在一个网络中&#xff0c;要做为一个合格的网络首先就要具备几种冗余&#xff0c;增加网络的可靠性。 这几种冗余分别为&#xff1a;线路冗余&#xff0c;设备冗余&#xff0c;网关冗余&#xff0c;UPS冗余 VRRP该协议就是解决网关冗余的。在二层…

同态加密:重塑数据隐私与安全的未来

同态加密技术是当今信息安全领域的一个重要研究方向&#xff0c;它允许在加密数据上直接进行计算&#xff0c;而无需将数据解密。这种加密方式对于保护数据隐私和增强云计算安全具有重要意义。在这篇文章中&#xff0c;我们将深入探讨同态加密的基本概念、技术特点、应用场景以…

[react] useState的一些小细节

1.无限循环 因为setState修改是异步的,加上会触发函数重新渲染, 如果代码长这样 一秒再修改,然后重新触发setTImeout, 然后再触发,重复触发循环 如果这样呢 还是会,因为你执行又会重新渲染 2.异步修改数据 为什么修改多次还是跟不上呢? 函数传参解决 因为是异步修改 ,所以…

day 74 js

JS的作用&#xff1a; 修饰 HTML 标签&#xff08;CSS&#xff09;设置 HTML 标签的动作&#xff08;JS&#xff09;JS特点&#xff1a;基于对象的编程语言&#xff0c;通过浏览器解释执行作用&#xff1a;表单验证、改变标签样式、获取和设置标签属性值 1 表单验证: <fo…

抽象工厂模式:深入探索面向对象设计的多样性

在软件开发中&#xff0c;正确地应用设计模式对于构建可扩展、可维护和高效的系统至关重要。抽象工厂模式作为创建型设计模式之一&#xff0c;提供了一个高层接口&#xff0c;用于创建一系列相关或依赖对象&#xff0c;而无需指定它们具体的类。本文将详细介绍抽象工厂模式的概…

MyBatis源码介绍

文章目录 MyBatis的核心流程介绍SqlSessionFactory的理解MyBatis中的Executor的源码理解Spring中是如何解决MySQL的SqlSession的线程安全问题MyBatis面向Mapper编程工作原理Mybatis动态sql执行原理Mybatis的一级、二级缓存实现原理Mybatis的插件运行原理以及如何编写一个插件my…

【攻防世界】web2(逆向解密)

进入题目环境&#xff0c;查看页面信息&#xff1a; <?php $miwen"a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";function encode($str){$_ostrrev($str);// echo $_o;for($_00;$_0<strlen($_o);$_0){$_csubstr($_o,$_0,1);$__ord($_c)1;…

排序之快速排序

代码 class Solution {public int[] sortArray(int[] nums) {merge(nums, 0, nums.length - 1);return nums;}private void merge(int[] nums, int l, int r){if(l > r) return;// 随机选取主元int i new Random().nextInt(r - l 1) l;int temp nums[i];nums[i] nums[…

【好用】推荐10套后端管理系统前端模板

后台管理系统前端模板是开发者在构建后台管理系统时使用的一种工具&#xff0c;它提供了预先设计好的界面和组件&#xff0c;以帮助开发者快速搭建出功能完善、用户体验良好的管理系统。以下是V哥整理的10款流行的后台管理系统前端模板&#xff0c;它们基于不同的技术栈和设计理…

第一部分 Vue讲解(代码版)

1.第一个vue实例 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-w…

要申请开通融资融券账户,有那些条件?

1、什么是融资融券交易? 融资融券交易&#xff0c;又称信用交易&#xff0c;是指投资者向具有融资融券业务资格的证券公司提供担 保物&#xff0c;借入资金买入交易所上市证券&#xff08;融资交易&#xff09;或借入交易所上市证券并卖出&#xff08;融券交易&#xff09; 的…

【vue】v-model.lazy等(非实时渲染)

v-model&#xff1a;实时渲染v-model.lazy&#xff1a;失去焦点/按回车后&#xff0c;才渲染v-model.number&#xff1a;值转换为数字v-model.trim&#xff1a;去除首尾空格 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8&qu…

ansible的常见用法

目录 ##编辑hosts文件 ##copy模块##复制过去 ##fetch模块##拉取 ##shell模块 ##好用 ##command模块## ##file模块### ##cron模块### ##crontab 计划任务 ##下载好时间插件 ##script模块 ##yum模块## ##yum下载源配置文件 /etc/yum.repos.d/CentOS-Base.repo ##ser…

【Java】第十五届蓝桥杯JavaB组第一道填空题

&#xff03;【Java】第十五届蓝桥杯JavaB组第一道填空题 大家好 我是寸铁&#x1f44a; 总结了一篇【Java】第十五届蓝桥杯JavaB组第一道填空题文章 喜欢的小伙伴可以点点关注 &#x1f49d; Java B组 第一道填空题题解如下: