一、传值和传址(引用)
Java 的参数传递分为传递基本数据类型(传值)和传递引用数据类型(传址)
这是副标题
public class Demo { |
true |
所有的类都默认继承 Object 这个基类。
基本数据类型不是类,所以不继承,但它们的封装类继承,使用基本数据类型时会自动封箱为其封装类。equals()、hashCode()、getClass() 和 toString() 是 Object 常用的方法。
API,源码:
public boolean equals(Object obj) { |
==
用于比较两个数值是否相等。
==
比较基本数据类型时,用来判断两个基本数据类型数值是否相等;引用变量存放的是对象在堆中的地址,==
比较两个引用时,比较两个地址的数值是否相等,即判断两个引用是否指向同一个对象。
int a = 1; |
所以 equals 方法用于判断两个对象是否在意义上相等,即这两个对象是否是同一个对象。
d.equals(c); // false |
String 重写了 equals 方法,比较两个 String(匿名)对象是否带有相同的字节组合:
public boolean equals(Object anObject) { |
题目描述:将字符串 "##We###Are###Family!###"
反转为 "###!ylimaF###erA###eW##"
。
分析与解答:这题我们的解答方法有很多,常见的方法是使用数组,下面来介绍用数据结构中的 Stack(栈)来完成反转。
Stack 的特点是 FILO(First In,Last Out)— 先进后出。此特点用于将字符串反转非常合适,以下是代码实现:
import java.util.Stack; |
首先来看一道题。
问下面两种赋值方式有何区别?
public class Demo { |
从表面其实看不出什么,我们可以通过 Class 文件反编译成的字节码(Byte Code)来分析。
如果你在使用 IDEA,请先在 IDEA 中安装 ASMified Bytecode Outline 插件,点击 安装详细教程,如果是其他集成环境,请自行 Google 安装插件教程。
JVM 对于是每个 Java 程序员掌握一定 Java 基础后,都需要学习的。因为很多代码问题,只能了解了 JVM 底层原理后才能解决。大多数 Java 后端开发者都知道堆(Heap)和栈(Stack)的概念,却没有真正理解其原理。推荐 《深入理解 Java 虚拟机(第二版)》— 周志明著 学习 JVM。
学习 JVM 前要了解进程和线程的概念。
以下是一个类比,来自 阮一峰 — 进程与线程的一个简单解释。
我奶奶生在一个重男轻女的家庭中,她小时候被她的亲生母亲虐待,让她的右脚落下了隐疾。但奶奶不以此为芥蒂,始终性格开朗,特别爱笑。
奶奶人很胖,饭量大,脚大,笑起来声音也大。我听我爷爷说,他娶奶奶的时候是 27 岁,奶奶是 20 岁。爷爷那时候是铁匠,给远近乡邻铸造各种生活、农耕工具。奶奶料理家务,兼顾农田,两人虽然日子清苦,但尚能温饱。
你能看出以下代码哪里内存泄漏吗?
// Can you spot the "memory leak"? |
答案是:
几道 “脑筋急转弯”(逻辑题)。
问:有五顶帽子,三红两蓝,给 A、B、C 三人每人戴一个,各自不准看自己帽子的颜色,可以看到另外两人帽子颜色。问 A 戴的什么颜色的帽子,他说不知道。然后又问 B 戴的什么颜色的帽子,他想了一会儿,同样说不知道。又问 C 戴的是什么颜色的帽子,他说虽然我不知道我的帽子是什么颜色的,但听你们这样一说,我知道了。问 C 戴的是什么颜色帽子?
答案是:
CPU 架构, 分为精简指令集 (RISC) 与复杂指令集 (CISC)
主要应用于手机、路由器等上。
主要应用于电脑上。