Think in Java 第三章操作符

赋值

对象赋值

​ 我们真正操作的是对对象的引用。所以倘若”将一个对象赋值给另一个对象“,实际上是将”引用“从一个地方复制到另一个地方。倘如对 对象使用 c= d 那么c和d都指向原本d指向的那个引用。

别名机制

修改c 的 同时也会改变d 他们不是相互独立的 指向相同的对象 而c原本指向的对象,会被垃圾回收自动清理

正确做法

t1.level = t2.level

保持两个对象相互独立,而不是将t1 和 t2 绑到相同对象身上

算数操作符

练习3

class VelocityCalculator1{
static float velocity(float d,float t)
{
if(t == 0) return 0f;
else return d/t;
}
} public class VelocityCalculator { public static void main(String[] args) {
float d = 902.3f;
float t = 100.4f;
System.out.println("Distance =" +d);
System.out.println("time =" + t);
float a = VelocityCalculator1.velocity(d,t);
System.out.println("Velocity =" + a); }
}

对象的等价

== !=

比较的是 对象的 引用

若想比较 对象的实际内容是否相同, 应该使用 特殊方法 equals()

练习五

class Doog{
String name;
String say;
void setName(String n){
name = n;
}
void setSay(String s){
say = s;
}
void showName(){
System.out.println(name);
}
void showSay(){
System.out.println(say);
}
}
public class dog {
public static void main(String[] args) {
Doog dog1 = new Doog();
Doog dog2 = new Doog();
dog1.setName("spot");
dog1.setSay("Ruff");
dog2.setName("Scrufy");
dog2.setSay("Ruff");
dog1.showName();
dog1.showSay();
dog2.showName();
dog2.showSay(); }
}

练习七 抛硬币simulates_coin_flipping

nextInt()用法:

会随机生成一个整数,这个整数的范围就是int类型的范围-2^31 ~ 2^31-1,但是如果在nextInt()括号中加入一个整数a那么,这个随机生成的随机数范围就变成[0,a)。
import java.util.*;
import org.greggordon.tools.*; public class CoinToss {
public static void main(String[] args) {
Random rand = new Random();
int coin = rand.nextInt();
if(coin % 2 == 0) P.rintln("heads");
else P.rintln("tails");
}
}

移位操作符

有符号移位 >> 左移 低位补0 右移

正数 高位 插入0

负数 高位插1

无符号移位 >>> 无论正负 高位插0

练习11

public class RightShiftTest {
public static void main(String[] args) {
int h = 0x10000000;
System.out.println(Integer.toBinaryString(h));
for (int i=1;i<28;i++){
h >>>= 1;
System.out.println(Integer.toBinaryString(h));
}
}
}
======================================================
10000000000000000000000000000
1000000000000000000000000000
100000000000000000000000000
10000000000000000000000000
1000000000000000000000000
100000000000000000000000
10000000000000000000000
1000000000000000000000
100000000000000000000
10000000000000000000
1000000000000000000
100000000000000000
10000000000000000
1000000000000000
100000000000000
10000000000000
1000000000000
100000000000
10000000000
1000000000
100000000
10000000
1000000
100000
10000
1000
100
10

练习12

public class RightShiftTest {
public static void main(String [] args) {
int h = -1;
System.out.println(Integer.toBinaryString(h));
h <<= 10;
System.out.println(Integer.toBinaryString(h));
for(int i = 0; i < 32; i++) {
h >>>= 1;
System.out.println(Integer.toBinaryString(h));
}
}
}
=============================================================
11111111111111111111111111111111
11111111111111111111110000000000
1111111111111111111111000000000
111111111111111111111100000000
11111111111111111111110000000
1111111111111111111111000000
111111111111111111111100000
11111111111111111111110000
1111111111111111111111000
111111111111111111111100
11111111111111111111110
1111111111111111111111
111111111111111111111
11111111111111111111
1111111111111111111
111111111111111111
11111111111111111
1111111111111111
111111111111111
11111111111111
1111111111111
111111111111
11111111111
1111111111
111111111
11111111
1111111
111111
11111
1111
111
11
1
0

习题13

 public static void main(String [] args) {
char c = 'a';
System.out.println(Integer.toBinaryString(c));
c = 'b';
System.out.println(Integer.toBinaryString(c));
c = 'c';
System.out.println(Integer.toBinaryString(c));
c = 'd';
System.out.println(Integer.toBinaryString(c));
c +=1;
System.out.println(Integer.toBinaryString(c));
c = 'A';
System.out.println(Integer.toBinaryString(c));
for(int i = 0; i < 6; i++) {
c +=1;
System.out.println(Integer.toBinaryString(c));
}
}
====================================================
1100001
1100010
1100011
1100100
1100101
1000001
1000010
1000011
1000100
1000101
1000110
1000111

提升

如果对 基本类型 执行算数运算或者按位运算,只要比int小 (char,byte,short),在运算之前就 自动转换成int。最终结果就是int类型。 如果把结果赋值给较小的类型,需要使用类型转换。通常表达式中出现大的数据类型决定了表达式最终结果的数据类型。 folat值与一个double值相乘,结果是double

练习14

import org.greggordon.tools.*;

public class StringCompare {
static void f(boolean b) {if(b == true) P.rintln(true);
else P.rintln(false);}
static void stringTest(String s, String t) {
f(s == t);
f(s.equals(t));
f(t.equals(s));
f(s != t);
// f(!s);
//f(!t);
// s = s && t;
// s = s || t;
// s = ~t;
// s = s & t;
// s = s | t;
// s = s ^ t;
// s &= t;
// s ^= t;
// s |= t;
}
public static void main(String[] args) {
String s = "one", t = "two";
StringWork.stringTest(s, t);
}
}
========================================================
false
false
false
true

Think in Java 第三章操作符的更多相关文章

  1. perl5 第三章 操作符

    第三章 操作符 by flamephoenix 一.算术操作符二.整数比较操作符三.字符串比较操作符四.逻辑操作符五.位操作符六.赋值操作符七.自增自减操作符八.字符串联结和重复操作符九.逗号操作符十 ...

  2. “全栈2019”Java第三章:安装开发工具IntelliJ IDEA

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  3. [Effective Java]第三章 对所有对象都通用的方法

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  4. Java 第三章 选择结构

    第三章   选择结构 if基本语法: if(条件){// 表达式 // 代码块 } eg: int a = 10; if(a > 1){ System.out.println("内容& ...

  5. 操作符 Thinking in Java 第三章

    3.1 更简单的打印语句 3.2 使用Java操作符 3.3 优先级 *int类型+String类型  直接转换为String类型 3.4 赋值 1. *引用=引用  两个引用指向同一个对象,所以操作 ...

  6. 初读"Thinking in Java"读书笔记之第三章 --- 操作符

    更简单的打印语句 导入自己编写的静态类库,即可使用print();打印 使用Java操作符 操作符:+,-,*,/,=,==,!=,+=,?:,%等 几乎所有操作符都只能操作"基本类型&qu ...

  7. 《Java编程思想》笔记 第三章 操作符

    1.操作符种类: 运算顺序1-7 一元操作符(单目操作符)  - 负号, + 正号,--递减,++递增 算术操作符 + - *  /  % 移位操作符  <<左移(低位补0),>&g ...

  8. C# 本质论 第三章 操作符和控制流

    操作符通常分为3大类:一元操作符(正.负).二元操作符(加.减.乘.除.取余)和三元操作符( condition?consequence:alternative(consequence和alterna ...

  9. 自学Java第三章——《流程控制语句结构》

    流程控制语句结构分为: 1.顺序结构:从上到下依次执行 2.分支结构:多个分支选择其中一个分支执行 3.循环结构:重复执行某些代码 3.1 顺序结构 执行过程:从上到下顺序执行 3.1.1 输出语句 ...

随机推荐

  1. scala模式匹配 case a @ b语法

    class caseTest { def main(args: Array[String]): Unit = { val c = Person(Student(1),"a") c ...

  2. MySQL在按照某个字段分组、排序加序号

    事情是这样的,最近领导给了一个新的需求,要求在一张订单表中统计每个人第一次和第二次购买的时间间隔,最后还需要按照间隔统计计数,求出中位数等数据. 由于MySQL不想Oracle那般支持行号.中位数等, ...

  3. Mac最新Flutter环境搭建运行和对比理解声明式UI

    前言 这段时间一直都在学习和写关于SwiftUI的东西,前面也总结了四篇文章来大体上说了下Demo中功能实现的一些细节,后面准备开始了解学习一下Flutter,争取在年前能再用Flutter写一份项目 ...

  4. 2021年了,`IEnumerator`、`IEnumerable`还傻傻分不清楚?

    IEnumerator.IEnumerable这两个接口单词相近.含义相关,傻傻分不清楚. 入行多年,一直没有系统性梳理这对李逵李鬼. 最近本人在怼着why神的<其实吧,LRU也就那么回事> ...

  5. MySQL45讲:一条update语句是怎样执行的

    首先创建一张表: create table T(ID int primary key,c int); 如果要更新ID=2这行+1:应该这样写 update T set c=c+1 where ID=2 ...

  6. java调用js代码

    jdk8里使用脚本引擎调用js 1.定义一个js方法: function getRouteInfo(province){ //注意,参数不要带var..在java里执行会报错.. if (provin ...

  7. Session、Cookie与Token

    http协议是无状态协议 协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(HTTP)是一种通信协议,它允许将超文本标记语言(HTML)文档从Web服务器传送到 ...

  8. 手动验证MySQL Innodb RR级别加锁 需要注意的几个点

    记录几个坑 优化器在表行数比较少的时候 会使用全表扫描,会造成全表所有的行加锁,所以需要使用force index 强制使用索引 来实现gap-lock(间隙锁)的应用 next-lock 加锁 会锁 ...

  9. CodeMonkey少儿编程第2章 turnTo对象

    目标 了解对象的概念 了解方法与对象的关系 掌握turnTo指令的用法 在开始本章的学习之前,我们先来复习一下上一章的知识点. 在第1章中,我们学会了在这个游戏中最简单的两个指令. step x 其中 ...

  10. ASP.NET MVC--sqlserver数据库脚本的导入导出

    1.右键选择数据库---任务----生成脚本 2.弹出如下框 导出整个表,默认下一步,否则选择特定数据库对象表单选框 3.修改文件名路径,可以保存脚本到制定路径,否则为默认,点击高级进入 要编写脚本的 ...