JAVA学习笔记(3)【运算符/类型转换】

本文详细介绍了Java学习中的关键知识点,包括变量的定义与注意事项,数据类型的默认提升和强转,以及常见的面试题。深入探讨了算术、赋值、比较、逻辑和位运算符的用法,并举例说明了三元运算符的运用。此外,还讲解了如何使用Scanner类从键盘录入数据,增强了程序的交互性。
摘要由CSDN通过智能技术生成

JAVA学习笔记(3)

提示:关于java系列的内容只是本人在老师的指导下和自学过程中的一些学习笔记,如果存在错误敬请批评指正!


前言

提示:本文涉及变量,强制转换运算符及Java变量中的一些常见面试题等。


提示:以下是本篇文章正文内容,下面案例可供参考

1.变量中的测试(定义变量注意事项)

定义变量的注意事事项:
1)定义long类型必须在值的后面加上标记:
L或者l(一般都用L)
2)浮点类型默认的数据类型是double类型
所以定义float类型时在值后面加上F或者f(一般都用大写)

其他注意事项:
1)同一个变量,不能被定义多次(不能被重复定义),这是因为java是一个强类型语言(语言和格式是非常严谨的!(java语言))

2)实际开发中,不建议同一行上定义多个变量

3)方法定义中的变量:局部变量,它在使用之前必须进行初始化

方法定义中的变量:有两种初始化方法

1)要么定义变量的时候对变量进行初始化

	数据类型 变量名 = 初始化值 ;
        eg: int a = 1 ;

2)要么就先定义,然后在使用的时候再初始化(必须初始化!!!)

数据类型 变量名;  //声明变量
变量名 = 初始化; //然后初始化了

eg:class Demo{
	public static void main(String[] args){
		int a = 1 ;
		int b = 2 ;
		Boolean temp ; //声明变量
		if(a == b){
		temp = true ; //变量初始化
		}else{
			temp = false ;  //变量初始化
		}
	}
}

4)语句结束的时候,都是以分号结束的(必须是英文字符)

2.Java中的基本数据类型—默认类型提升(隐式转换)

默认数据类型提升:
1)byte short char三者之间不转换,但是分别自己参与运算时优先提升为int类型—long—float—double

2)boolean类型:不参与任何的运算!它只是描述
逻辑判断的结果(true/false)

3.JAVA中的强转类型转换(强转):不仅适用于基本类型/引用类型

当变量相加计算的时候,如果接收的类型范围小于计算结果的数据类型需要强制类型转换,让我们的数据进行类型匹配,防止出现(jvm提示不兼容的类型:)
显示转换(强制类型转换)----不仅适用于基本类型,引用数据类型(后期研究引用类型)

格式:目标数据类型 变量名 = (目标数据类型)(结果) ;

实际开发中,尽量避免强转类型转换,可能会造成数据精度损失

4.Java变量常见的面试题

面试题(考点:强制类型转换):
	同一行定义了多个变量
	byte b, b1 = 3,b2 = 4 ;
	1)b = b1 + b2 ;    //变量相加
	2)b = 3+4 ; 			//两个常量相加
	输出b的值 

b = b1 + b2 编译失败
b = 3 + 4 可以成功

1)编译失败(原因分析)
因为byte,short,char三者之间不转换,一旦参与运算
优先提升为int

所以b1–先提升为int类型3
b2—提升为int类型的4
两个相加的结果为int类型的 7,而b的类型 byte,接收不了 所以需要强转类型转换

面试题(考点:byte取值范围)
        byte b = 129 ;
    在程序中,能编译通过吗? 
    如果不能,如何解决过,结果是多少,请阐述思路

解决方案:强转类型转换
格式:目标数据类型 变量名 = (目标数据类型)(结果);

//当前byte的值如果超出了范围 -128~127 :那么jvm的编译的时候就认为int类型了

byte b = int类型的 数据 ;  ----需要强转类型转换
解决方案:byte b = (byte)129 ; 

面试题:
1) 请描述下面的代码的含义:
float f = 12.34F ;
float f2 = (float)78.56 ;
double d = 12.78 ;

当前变量
f:本身就定义的是一个单精度类型 加了一个标记F
f2:是通过强制类型转换而来的,可能会造成数据的精度损失
格式: 目标类型 变量名 = (目标类型)(结果) ;
d变量:本身默认的double类型

2)关于字符串拼接符号
字符串+任何数据="新的字符串"
任何数据+字符串="新的字符串"

思考:要比较两个变量是否相等/求两个变量中的最大值/要计算他们的对某个数据的求余数/三个数据如何进行获取最大值呢?

5.运算符

1)算术运算符

​ 算术运算符:+,-,*,/,%(模)

2)赋值运算符

赋值运算符:=
举例:int a = 10 ; 将10赋值给int类型的变量a

3)比较运算符(关系运算符)

关系(比较)运算符<,>,<=,>=,!=,==

拓展的算术运算符: ++ 和 – --

场景1:
单独使用
后期的循环语句for
for(int x = 0 ; x < 10 ; x ++){
}
结论:无论++或者–在数据的前面还是后面,都是对当前数据本身进行自增1或者自减1

场景2:
参与运算使用(笔试题中出现)
参与运算:
++或者- -如果在数据的前面,先自增或者自减,然后在参与运算!
++或者- -如果在数据的后面,先运算,然后在自增或者自减

++a:先自增,再参与运算
a++:先参与运算,再自增

赋值运算符:
基本的赋值运算符 :=
扩展的赋值运算符 :+=,-=,*=,/=,%= (它有自己的特点)

基本的赋值运算符 =
将等号右边的数据赋值给等号左边的变量
eg:
int x = 100 ; 意思:将100赋值给int类型的变量x
== 是用来进行判断的 两者不能等共同

扩展的赋值运算符:
特点:隐藏了强转类型转换
+=,-=,*=,/=,%=

eg:	short s = 1 ;
s +=1 ; //扩展的赋值运算符:特点 隐藏了强转类型转换
		//等价于: s = (short)(s+1) ;

4)逻辑运算符(重点: 进行逻辑判断)

逻辑运算符:
逻辑单与&,逻辑单或|,逻辑异或^,逻辑非!

基本的逻辑运算符

逻辑单与& (并列关系)
			特点:有false,则false	
	逻辑单或| (或的关系)
			特点: 有true,则true
	逻辑异或^ 
			特点: 相同则为false,不同则为true
				==简单记忆:
						男女关系问题		
						男男 :false
						女女 :false
						男女 : true
						女男 : true
	逻辑非! 
			特点:非true,则false;非false,则true
			偶数个非是它本身!

重点:逻辑双与&&特点

面试题
逻辑双与&&和逻辑单与&有什么区别?

共同点:
	都是表示并列关系,基本特点:有false,则false
		
不同点:
	具有"短路"效果
	逻辑双与&& 连接的表达式:如果左边是一个false,右边就不执行了!

5)位运算符

基本位与&,位或|,位异或^
<<,>>,>>> 移位符号

位运算符: 就是对当前这些数据进行计算的(补码进行计算的)
	
	基本位运算符:
			位与&:  有0则0
			位或|:	有1,则1
			位异或^: 相同则为0,不同则为1
					有另一个特点(面试题考点)	
	
	一个数据被另一个数据如果位异或两次,其值是它本身!
						
			~反码:  全部按位取反(0变1,1变0)
			
	其他的位运算符:移位符号
					<<:左移
					>>:右移
					>>>:无符号右移
面试官实际就是想问对位运算符的位异或的特点:
	
	实现两个变量的数据进行交互
		举例
				int a = 10 ;
				int b = 20 ;
				最终要将a和b进行互换
方式1:使用中间第三方变量(最常用的一种方式:推荐使用第一种)
方式2:使用位异或的特点^:一个数据被另一个数据位异或两次,其值是它本身

6)三目(三元)运算符号

三元运算符---(三目运算符) 
二目运算符 int m =20,n =10;
单目运算符 int a = 10 ;

三元运算符的格式
(表达式)?执行 true的结果:执行false 的结果;

表达式:可以简单可以非常复杂

流程:
首先判断表达式是否成立,如果成立,则执行true的结果
否则,执行false的结果;

举例: 有两个变量 ,需要比较两个数据中的最大值;
比较较两个数据中的最大值

格式:(表达式)?执行 true的结果:执行false 的结果;
	定义最终结果变量

方式1:定义中间变量
方式2:三元运算符是可以嵌套的 (一步走)

`

6.键盘录入数据----让程序更灵活一些

在写程序的过程中,想让程序更加灵活,使用Scanner类:
jdk提供的这个类----作用 "一个简单的文本扫描器"

目前:就是录入int类型数据
操作步骤
	1)导包 import(关键字) java.util.Scanner ; 格式必须class类上面
	需要在我当前的代码中使用jdk提供的这个类Scanner
	
	2)创建一个文本扫描器对象 (键盘录入对象)
		固定格式
	Scanner 对象名(自己起名字)  = new Scanner(System.in) ;
	
	3)友情提示并录入int类型数据
		System.out.println("请您输入一个数据:") ;
		表示:录入的是int类型数据
	int 接收的变量名 = 对象名.nextInt() ; //nextInt() ;键盘录入Scanenr的方法
	
	4)然后 "接收的变量名 "输出出来"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Cipher_Xing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值