Think in Java 第三章操作符
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 第三章操作符的更多相关文章
- perl5 第三章 操作符
第三章 操作符 by flamephoenix 一.算术操作符二.整数比较操作符三.字符串比较操作符四.逻辑操作符五.位操作符六.赋值操作符七.自增自减操作符八.字符串联结和重复操作符九.逗号操作符十 ...
- “全栈2019”Java第三章:安装开发工具IntelliJ IDEA
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- [Effective Java]第三章 对所有对象都通用的方法
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- Java 第三章 选择结构
第三章 选择结构 if基本语法: if(条件){// 表达式 // 代码块 } eg: int a = 10; if(a > 1){ System.out.println("内容& ...
- 操作符 Thinking in Java 第三章
3.1 更简单的打印语句 3.2 使用Java操作符 3.3 优先级 *int类型+String类型 直接转换为String类型 3.4 赋值 1. *引用=引用 两个引用指向同一个对象,所以操作 ...
- 初读"Thinking in Java"读书笔记之第三章 --- 操作符
更简单的打印语句 导入自己编写的静态类库,即可使用print();打印 使用Java操作符 操作符:+,-,*,/,=,==,!=,+=,?:,%等 几乎所有操作符都只能操作"基本类型&qu ...
- 《Java编程思想》笔记 第三章 操作符
1.操作符种类: 运算顺序1-7 一元操作符(单目操作符) - 负号, + 正号,--递减,++递增 算术操作符 + - * / % 移位操作符 <<左移(低位补0),>&g ...
- C# 本质论 第三章 操作符和控制流
操作符通常分为3大类:一元操作符(正.负).二元操作符(加.减.乘.除.取余)和三元操作符( condition?consequence:alternative(consequence和alterna ...
- 自学Java第三章——《流程控制语句结构》
流程控制语句结构分为: 1.顺序结构:从上到下依次执行 2.分支结构:多个分支选择其中一个分支执行 3.循环结构:重复执行某些代码 3.1 顺序结构 执行过程:从上到下顺序执行 3.1.1 输出语句 ...
随机推荐
- 温故而知新--day1
温故而知新--day1 变量类型 变量是计算机存储数据的内存空间,由于计算机可以处理不同的数据,不同的数据就要定义不同的数据类型.python的数据类型很多,还可以自定义数据类型,常用的一般数据类型有 ...
- vue的路由以后的页面整合
前面呢也提到一点点,今天就吧这个页面整合给分享一下.有不对的地方还望包容. 在vue中,一般在主显示的界面的路径呢一般是'/'也就是单括号中有一斜杠的这个呢是默认的显示路径.只要路由配置了这个路径用& ...
- redis持久化怎么选?成年人从来不做选择...
前言 面试官:你知道 redis 是的怎么做持久化的吗? 我:我知道 redis 有两种方式,一种是 RDB,一种是 AOF. 面试官:那这两种方式具体是怎么做的,它们的区别是什么,生产环境中到底应该 ...
- Rabbitmq可靠消息投递,消息确认机制
前言 我们知道,消息从发送到签收的整个过程是 Producer-->Broker/Exchange-->Broker/Queue-->Consumer,因此如果只是要保证消息的可靠投 ...
- show slave status常用参数备忘
mysql> show slave status\G*************************** 1. row *************************** Slave_IO ...
- 【Linux】常用的Linux可插拔认证模块(PAM)应用举例:pam_limits.so、pam_rootok.so和pam_userdb.so模块
常用的Linux可插拔认证模块(PAM)应用举例:pam_limits.so.pam_rootok.so和pam_userdb.so模块 pam_limits.so模块: pam_limits.so模 ...
- P1967 货车运输(倍增LCA,生成树)
题目链接: https://www.luogu.org/problemnew/show/P1967 题目描述 A国有n座城市,编号从 1到n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制, ...
- ctfshow—web—web2
打开靶机,根据提示是SQL注入 打开后看到登录窗口 方法一.手工注入 抓取数据包 开始SQL注入测试 利用万能密码,登录成功 查看回显位置 查询数据库 查询数据库内数据表 如果想整齐一点显示可以添加g ...
- 力软最新版本与.netCore版本
功能强大,直接上图: 加微信或QQ交流开发技术:25489181 netcore版本 版本优势: .NET Core是适用于 Windows.Linux 和 macOS 的免费.开源托管的计算机软件框 ...
- MongoDB分片集群部署方案
前言 副本集部署是对数据的冗余和增加读请求的处理能力,却不能提高写请求的处理能力:关键问题是随着数据增加,单机硬件配置会成为性能的瓶颈.而分片集群可以很好的解决这一问题,通过水平扩展来提升性能.分片部 ...