基础二:操作符

使用Java操作符

操作符接受一个或者多个参数,并生成一个新值。

操作符用于操作数,生成一个新值。 另外有些操作符可能会改变操作数自身的值,这被称为“副作用”。

这些能改变操作数的操作符最普遍的作用就是产生副作用。

几乎所有的操作符都只能操作“基本类型”。 例外的操作符是 = == 和 != 。

这些操作符能操作所有的对象。 除此之外,String类支持 + 和 +=.


优先级

当一个表达式中存在多个操作符时,操作符的优先级决定了各个部分的计算顺序。 最简单的规则就是先乘除后加减。另外也要明确括号的作用。

赋值

赋值使用操作符 “=” 。

它的意思是 取右边的值 ,把它赋值给左边。

右边可以是任意数、变量或者表达式(只要能生成一个值就行),左边必须是一个明确的已命名的变量。 也就是说,必须有一个物理空间可以存储等号右边的值。

比如 :

a = 4 ;

但是不能把任何东西赋值给一个常数,常数不能作为左值。比如(4 = a ; worong !)

对于基本数据类型的赋值:

    基本类型存储了实际的数值,而并非指向一个对象的引用,所以在为其赋值的时候,是直接将一个地方的内容复制到了另一个地方。 另外,对基本数据类型使用 a = b ,那么b的内容就复制给a,若紧接着修改a,b的值不受这种修改的影响

但是在为对象赋值的时候,情况却发生了变化:

        对一个对象进行操作时,我们真正操作的是对象的引用。 所以倘若“将一个对象赋值给另外一个对象”,实际上是将“引用”从一个地方复制到另外一个地方。  这意味着假若对对象使用c = d ,那么c和d都指向原来只有d指向的那个对象。

Tank类有两个实例 t1和t2, 分别对level域赋不同的值,然后将t2赋给t1,紧接着又修改t1.

由于赋值操作的是一个对象的引用,所有修改t1的同时,也改变了t2. 这是由于t1和t2包含的是相同的引用,他们指向相同的对象(原来t1包含的对对象的引用,是指向一个值为9的对象,在对t1赋值的时候,这个引用被覆盖了,也就是丢失了;而那个不再被引用的对象会有垃圾回收器自动清理)。

这种特使的现象被称为“别名现象”,是java操作对象的一种基本方式,如何避免的?可以这样写

t1.level = t2.level ;

这样便可以保持两个对象彼此独立,而不是将t1和t2绑定到相同的对象上。

算数操作符

+ - * / 加减乘除 以及取模操作符 %

要将x+4,并将结果赋值给x ,可以写成 x +=4 ;

通过Random类的对象,程序可以生成许多不同类型的随机数字,只需要调用

传递给netxtInt()的参数设置了所产生随机数的上线,而其下限为0 。 但是这个下限并不是我们所想要的,可以对结果进行+1操作。


自动递增和递减

++ –

举个例子 假设 a是一个int值,++a 就能等价于 a = a +1 ;

递增和递减操作符不仅改变了变量,并且以变量值作为生成的结果。

这两个操作符各有两种使用方式,通常称为前缀式和后缀式。

前缀递增: 表示 ++操作符位于变量或者表达式的前面,反之 后缀递增 ++操作符位于变量或者表达式的后面。

类似的,前缀递增递减 一样的..

**对于前缀形式:执行完运算后才得到值。

对于后缀形式:在运算之前就得到值**。

他们是除了那些设计赋值的操作符以外,唯一就有“副作用”的操作符。 也就是说,他们会改变操作数,而不仅仅是使用自己的值。

    int i = 1;
        System.out.println("i:" + i); // 1
        System.out.println("=======================");
        System.out.println("++i:" + ++i); // 2    先执行运算 i首先加1,此时i为2,并以变量(即i=2)的值作为结果
        System.out.println("i:" + i); // 2
        System.out.println("i++:" + i++); // 2  先给变量i赋值(i=2)因为是以变量的的值作为结果,所以 i++ 的值为2,在执行运算,运算后 i+1变为3
        System.out.println("i:" + i); // 3
        System.out.println("=======================");
        System.out.println("--i:" + --i); // 2   先运算,运算后3-1后 i为2 ,再赋值,此时i 为2
        System.out.println("i:" + i); // 2
        System.out.println("i--:" + i--); // 2
        System.out.println("i:" + i); // 1

关系操作符

关系操作符生成的是一个boolean结果。

真实则为true,反之false。

主要包括一下符号:

< 、 > 、<=、>= 、 == 以及 !=

测试对象的等价性

尽管对象的内容相同,但是对象的引用确实不同的,而 ==和 != 比较的是对象的引用。

如果相比较两个对象的实际内容是否相同,需要使用 equals().

假设我们创建了自己的类,就像下面那样

what the fuck ? 又是false了…..

这是因为 equals()的默认行为是比较引用, 所以除非在自己的新类中覆盖equals方法,否则不可能表现出我们希望的行为。

大多是java库都实现了equals方法,以便用来比较对象的内容,而非对象的引用。


逻辑操作符

与 && 或 || 非 ! ,返回一个布尔值。

直接常量

直接常量后面的后缀字符标识了它的类型。

若为 大写或者小写的L,代表long

F ,代表float

D,代表都变了

十六进制适用于所有整数数据类型,以前缀 0x或者0X,后面跟随0~9或者大写(或小写)的a~f来表示。

八进制数由前缀0以及后续的0~7的数字来表示。

按位操作符

用来操作二进制

&= 按位与赋值

|= 按位或赋值

^= 按位非赋值

移位操作符

也是用来操作二进制

= 右移赋值

= 无符号右移赋值

<<= 赋值左移

三目表达式

boolean-exp ? value0 : value1

boolean-exp 为true,这计算 value0 ,反着计算 value1 .

时间: 2024-10-16 15:52:29

基础二:操作符的相关文章

Scala 中的函数式编程基础(二)

主要来自 Scala 语言发明人 Martin Odersky 教授的 Coursera 课程 <Functional Programming Principles in Scala>. 2. Higher Order Functions 把其他函数作为参数或者作为返回值,就是 higher order functions,python 里面也可以看到这样使用的情形.在酷壳上的博客有一个例子就是将函数作为返回值. 2.1 匿名函数 在 python 里边叫 lambda 函数,常常与 map(

Object Pascal 语法之语言基础(二)

1.5 数据类型与定义变量 Object Pascal 语言的最大特点是对数据类型的要求非常严谨.传递给过程或函数的参数值必须与形参的类型一致.在Object Pascal 语言中不会看到像C 语言编译器提示的“可疑的指针转换”等警告信息.由于Object Pascal 语言对数据类型比较严谨,因此它会对代码进行严格检查,以确保不会出现错误.变量是程序代码中代表一个内存地址的标识符,那么该地址的内存内容就可以在程序代码执行时被改变.每个变量都有一个名字和数据类型,名字可以用来引用变量,数据类型决

Html5开发——html+css基础二(个人博客一)

今天没有写完,而且写的还有点问题,所以今天就先不上传代码了(ps:快写完了才发现布局有问题,导致代码太多,感觉写的不是很好,所以今天先分析一下布局) 第一步先写一个大的div用来放ABC三个部分,这个大的div居中! 第二步分别写ABC三个部分,ABC三个部分分别使用浮动(float)来定位.A和B都各使用了一张非常小的图片,通过重复(repeat)属性生成A和B 第三步C部分分别写好3~16这几个模块,在通过组合利用浮动定位.分组如下: E:3 F:4.7.10.13 G:5.8.11.14

Swift的基础,操作符,字符串和集合类型

这篇文章主要讲解苹果Swift官方指南的第二章前四节的要点内容,如果想看完整的英文文档可以去苹果开发者页面下载. Basic 声明常量let 声明变量var 注释依旧使用"//" "/**/", 注意这里"/**/"在Swift可以嵌套使用 表达式结尾不再有分号 整数 你可以声明为Int或者UInt,他们本身适应不同平台(64位, 32位),类似于NSInteger,NSUInteger 也可以直接声明为指定字节数的Int,如: Int8, In

Python全栈开发【基础二】

Python全栈开发[基础二] 本节内容: Python 运算符(算术运算.比较运算.赋值运算.逻辑运算.成员运算) 基本数据类型(数字.布尔值.字符串.列表.元组.字典) 编码与进制转换 Python 运算符 1.算术运算: 2.比较运算: 3.赋值运算: 4.逻辑运算:  5.成员运算: 基本数据类型 1.数字 int(整型) 1 class int(object): 2 """ 3 int(x=0) -> integer 4 int(x, base=10) -&g

R语言基础(二) 可视化基础

> which.max(apply(x[c("x1","x2","x3")], 1, sum))49 > x$num[which.max(apply(x[c("x1","x2","x3")], 1, sum))][1] 2005138149 > hist(x$x1) > plot(x$x1,x$x2) > table(x$x1) 80 81 82 83 84

Bootstrap &lt;基础二十五&gt;警告(Alerts)

警告(Alerts)以及 Bootstrap 所提供的用于警告的 class.警告(Alerts)向用户提供了一种定义消息样式的方式.它们为典型的用户操作提供了上下文信息反馈. 您可以为警告框添加一个可选的关闭按钮.为了创建一个内联的可取消的警告框,请使用 警告(Alerts) jQuery 插件. 您可以通过创建一个 <div>,并向其添加一个 .alert class 和四个上下文 class(即 .alert-success..alert-info..alert-warning..ale

图像处理之基础---二维卷积运算原理剖析

卷积运算(Convolution)是通过两个函数f 和g 生成第三个函数的一种数学算子,表示函数f 与经过翻转和平移与g 的重叠部分的累积.如果将参加卷积的一个函数看作区间的指示函数,卷积还可以被看作是“滑动平均”的推广.假设: f(x),g(x)是R1上的两个可积函数,并且积分是存在的.这样,随着 x 的不同取值,这个积分就定义了一个新函数h(x),称为函数f 与g 的卷积,记为h(x)=(f*g)(x). 两个向量卷积,说白了就是多项式乘法.下面用个矩阵例子说明其工作原理: a和d的卷积就是

Bootstrap &lt;基础二十六&gt;进度条

Bootstrap 进度条.在本教程中,你将看到如何使用 Bootstrap 创建加载.重定向或动作状态的进度条. Bootstrap 进度条使用 CSS3 过渡和动画来获得该效果.Internet Explorer 9 及之前的版本和旧版的 Firefox 不支持该特性,Opera 12 不支持动画. 默认的进度条 创建一个基本的进度条的步骤如下: 添加一个带有 class .progress 的 <div>. 接着,在上面的 <div> 内,添加一个带有 class .prog

Python基础二--基本控制语句

基本接触每一种语言,都需要做的:1.print 一个"Hello world!" 2.了解基本的数据类型 3.学习控制语句. 当我们学习控制语句,一般都离不开if,for ,while,switch(case).本文就做一个简单的介绍python的基本控制语句,其中我们用if while来做一个经典的"猜数字游戏",if for来做一个"输出完美数". 在此之前,对于一些没用过python的同学而熟悉c/c++等用{}来做块的要注意了,pytho