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. springboot源码解析-管中窥豹系列之总体结构(一)

    一.简介 Springboot源码解析是一件大工程,逐行逐句的去研究代码,会很枯燥,也不容易坚持下去. 我们不追求大而全,而是试着每次去研究一个小知识点,最终聚沙成塔,这就是我们的springboot ...

  2. Spark的dataframe转rdd通用工具类

    需求解决问题 当每次读取hive表或者其他数据源,获取数据,相对其进行rdd操作,遇到任何类都需要df.rdd(row>row.getstring(0))去获取,就很麻烦,所以可以实现个通用的转 ...

  3. spark使用idea向yarn提交报错:Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/jersey/api/client/config/ClientConfig

    解决方法: 找到1.19版本放到spark的jars目录下

  4. Sentinel限流之快速失败和漏桶算法

    距离上次总结Sentinel的滑动窗口算法已经有些时间了,原本想着一口气将它的core模块全部总结完,但是中间一懒就又松懈下来了,这几天在工作之余又重新整理了一下,在这里做一个学习总结. 上篇滑动窗口 ...

  5. maven 无法导入ojdbc 的jar包 解决方法

    由于maven无法在线安装ojdbc包,所有先在我们需要手动导入. 准备环境: 1.系统需要配置好jdk以及maven环境. 2.ojdbc的jar包,记住jar的路径,我的路径是:E:\jdbc\o ...

  6. JVM-03

    目录 1.1 新生代垃圾收集器 1.1.1 Serial 垃圾收集器(单线程) 1.1.2 ParNew 垃圾收集器(多线程) 1.1.3 Parallel Scavenge 垃圾收集器(多线程) 2 ...

  7. Spring中的@Valid 和 @Validated注解你用对了吗

    1.概述 本文我们将重点介绍Spring中 @Valid和@Validated注解的区别 . 验证用户输入是否正确是我们应用程序中的常见功能.Spring提供了@Valid和@Validated两个注 ...

  8. Sentry(v20.12.1) K8S 云原生架构探索,SENTRY FOR JAVASCRIPT Source Maps 详解

    系列 Sentry-Go SDK 中文实践指南 一起来刷 Sentry For Go 官方文档之 Enriching Events Snuba:Sentry 新的搜索基础设施(基于 ClickHous ...

  9. oracle出现未选定行

    初学oracle,在SQLplus输入查询命令 出现了以下情况.. 后来了解到oracle的SQL语句其中有些词必须大写才会有效. 在这个语句中将username后面的值改为大写就可以了. 还有一种就 ...

  10. Ubuntu_Gedit配置

    Ubuntu_Gedit配置 为了换Ubuntu的时候能够更加方便,不用再用手重新打一遍代码,丢几个Gedit配置-- External Tools gdb compile (F2) #!/bin/s ...