教育行业A股IPO第一股(股票代码 003032)

全国咨询/投诉热线:400-618-4000

天富娱乐注册注册开户 王者荣耀电竞项目居然能做为亚运会类、 常王者荣耀电竞项目居然能做为亚运会、 Collection、 泛型

更新时间:2018年09月30日10时30分 来源:传智播客 浏览次数:

1.0  王者荣耀电竞项目居然能做为亚运会
java.lang.王者荣耀电竞项目居然能做为亚运会类: 根类, 所有类的父类
<> 成员方法
[AppleScript] 纯文本查看 复制代码
1
2
String toString() :返回该对象的字符串表示
boolean equals(王者荣耀电竞项目居然能做为亚运会 obj) :指示其他某个对象是否与此对象"相等"
王者荣耀电竞项目居然能做为亚运会类的特点:
是所有类的父类, 任何一个类都直接或间接地继承自王者荣耀电竞项目居然能做为亚运会类, 并可以使用王者荣耀电竞项目居然能做为亚运会类中定义的方法
一个类如果没有指定继承某个父类, 则默认继承王者荣耀电竞项目居然能做为亚运会类
1.1  王者荣耀电竞项目居然能做为亚运会类之toString()方法
[AppleScript] 纯文本查看 复制代码
1
public String toString() :返回该对象的字符串表示

作用:
任何类的对象都可调用toString(), 得到一个对象的字符串表示形式, 默认使用王者荣耀电竞项目居然能做为亚运会类中定义的方式
如果不想使用默认方式, 子类可以重写toString()方法, 转换为自己想要的内容
一般我们都要输出JavaBean的属性名和属性值, Alt + Insert 选择 toString() 即可重写
补充
[AppleScript] 纯文本查看 复制代码
1
2
3
4
5
<> 王者荣耀电竞项目居然能做为亚运会类中toString()的实现方式:
public class 王者荣耀电竞项目居然能做为亚运会 {
public String toString() {
return getClass().getName() + "@" +Integer.toHexString(hashCode());
}}
代码解释:
[Java] 纯文本查看 复制代码
1
2
3
4
5
6
getClass().getName():
getClass(): 王者荣耀电竞项目居然能做为亚运会类的方法, 获取当前对象的类的字节码对象
getClass().getName(): 通过字节码对象获取该类的全名
Integer.toHexString(hashCode())
hashCode(): 王者荣耀电竞项目居然能做为亚运会类的方法, 获取当前对象地址值的哈希值
Integer.toHexString(int n): 将参数转换为十六进制数字的字符串
最终:
1.2  王者荣耀电竞项目居然能做为亚运会类之equals方法
重写equals()的作用:
不重写时, 自定义对象默认继承王者荣耀电竞项目居然能做为亚运会类的equals()方法, 通过 == 比较地址值
但开发时, 一般要重写equals()方法, 让对象根据属性值来判断是否相等
[Java] 纯文本查看 复制代码
IDEA快捷键: Alt+Insert, 选 equals() and hashCode()
@Override
[AppleScript] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
public boolean equals(王者荣耀电竞项目居然能做为亚运会 o) {
// 如果对象地址值相同, 则是同一个对象, 那么属性值肯定相同,认为相等
if (this == o) return true;
// 如果被比较对象为null, 或者不是同一个类型, 则认为不相等
if (o == null || getClass() != o.getClass()) returnfalse;
// 如果不是同一个对象, 且不为null, 且是一个类型, 则向下转型比较子类特有属性
Person person = (Person) o;
// 基本类型属性值用==比较, 引用类型属性值用王者荣耀电竞项目居然能做为亚运会s工具类的equals()比较
return age == person.age &&
王者荣耀电竞项目居然能做为亚运会s.equals(name, person.name);
补充
// 王者荣耀电竞项目居然能做为亚运会s类中equals()方法源码
[AppleScript] 纯文本查看 复制代码
1
2
3
public static boolean equals(王者荣耀电竞项目居然能做为亚运会 a, 王者荣耀电竞项目居然能做为亚运会 b) {
return (a == b) || (a != null && a.equals(b));
}
2.0  日期时间相关的类
2.1  Date类及其方法介绍
注意: 不要导错包! 有2个包中都有Date类, 一个是java.sql.Date, 另一个是java.util.Date
我们用的是 java.util.Date
java.util.Date类: 日期, 表示特定的瞬间, 精确到"毫秒"
<>构造方法
[AppleScript] 纯文本查看 复制代码
1
2
Date(): 创建Date对象, 表示当前系统时间
Date(long date): 创建Date对象, 使用指定的毫秒值作为时间
**常用成员方法
[AppleScript] 纯文本查看 复制代码
?
1
2
3
4
5
long getTime(): 获取Date对象中保存的时间毫秒值
void setTime(long time): 修改Date对象的时间
UNIX时间戳: 0时区 1970-01-0100:00:00 开始, 至今经过的毫秒值(1 = 1000 毫秒)
10位 精确到秒 : 1494992791 = 2017/5/17 11:46:31
13位 精确到毫秒: 1494992791000 = 2017/5/17 11:46:31
2.2  DateFormat类及其构造方法
[AppleScript] 纯文本查看 复制代码
1
2
3
4
5
java.text.DateFormat抽象类: 用于格式化和解析时间. 提供了方便的方法
// 常用成员方法 (抽象类不能创建对象, 但可以有非抽象的方法供子类使用)
String format(Date date): 格式化, 从Date对象转换为String对象
Date parse(String source): 解析, 从String对象转换为Date对象
java.text.SimpleDateFormat类
<> 构造方法
SimpleDateFormat(String pattern): 用给定的模式和默认语言环境的日期格式符号创建对象
** 常用模式: 可在SimpleDateFormat类中查看
[AppleScript] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
y:
M:
d:
H: (24小时制)
m:
s:
E: 星期
D: 年中的天
K: 小时(12小时制)
S: 毫秒
示例: "yyyy-MM-dd E HH:mm:ss.SSS"
结果: 2016-04-01 星期五 17:29:15.868
如果要匹配普通的英文字母, 则需要用单引号括起来: "'abc'"
如果要匹配单引号, 则使用2个单引号: "''"
**使用指定的模式创建对象
[AppleScript] 纯文本查看 复制代码
1
SimpleDateFormat format = newSimpleDateFormat("yyyy-MM-dd HH:mm:ss");
2.3  DateFormat类之格式化format方法
String format(Date date): 格式化, 从Date对象转换为String对象
[AppleScript] 纯文本查看 复制代码
?
1
2
3
例如, SimpleDateFormat对象的模式是: "yyyy年MM月dd日 HH:mm:ss"
那么, 将Date格式化后就可以是这种样子: 2018010203:04:05
SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss");

// 创建日期对象(使用当前系统时间)
[AppleScript] 纯文本查看 复制代码
1
Date date = new Date();
// 格式化
[AppleScript] 纯文本查看 复制代码
1
2
String s = sdf.format(date);
System.out.println(s);
2.4  DateFormat之解析parse方法
[AppleScript] 纯文本查看 复制代码
1
2
3
Date parse(String source): 解析, 从String对象转换为Date对象
例如, SimpleDateFormat对象的模式是: "yyyy-MM-dd"
要解析为Date对象的字符串必须符合模式: 2000-01-02[/size][/font][/align][align=left][font=微软雅黑][size=3][color=#df402a]String s = "2000-10-01";[/color][/size][/font][font=微软雅黑][size=3]
// 将该日期字符串解析为日期对象
[AppleScript] 纯文本查看 复制代码
1
2
SimpleDateFormat sdf = newSimpleDateFormat("yyyy-MM-dd");
Date date = sdf.parse(s);

// 红线按 Alt + Enter , 选择第一项 Add exception to method
signature
// 将date转换为long
[AppleScript] 纯文本查看 复制代码
1
2
long time = date.getTime();
System.out.println(time);
3.0  Calendar对象的获取方式
java.util.Calendar抽象类: 代表日历, 提供了不同国家的历法, 封装了很多时间属性
// 静态方法
[AppleScript] 纯文本查看 复制代码
1
static Calendar getInstance(): 根据当前系统设置获取合适的Calendar对象, 表示当前系统时间
// 获取日历对象的示例
[AppleScript] 纯文本查看 复制代码
1
Calendar c = Calendar.getInstance(); // 代表了当前时间
补充:
[AppleScript] 纯文本查看 复制代码
1
Calendar.getInstance() 会根据当前系统获取合适的子类对象, 我们获取到的是 GregorianCalendar
3.1  Calendar类的常用功能
java.util.Calendar抽象类: 代表日历, 提供了不同国家的历法, 封装了很多时间属性
**静态成员变量
[AppleScript] 纯文本查看 复制代码
1
2
3
4
5
6
7
static int YEAR :年份
static int MONTH :月份. 注意月份数值是 0-11
static int DAY_OF_MONTH :日期
static int HOUR :小时(12小时制)
static int HOUR_OF_DAY :小时(24小时制)
static int MINITE :分钟
static int SECOND :
** 非静态成员方法
[AppleScript] 纯文本查看 复制代码
1
2
3
4
5
int get(int field): 获取指定日历字段的值 int year = cal.get(Calendar.YEAR)
void set(int field, int value): 修改指定日历字段为指定的值
void add(int field, int amount): 调整指定日历字段的值. 正数增加,负数减少
Date getTime(): Calendar转Date
void setTime(Date d): Date转Calendar
// 示例
// 获取日期:
[AppleScript] 纯文本查看 复制代码
1
int day = calendar.get(Calendar.DAY_OF_MONTH);
// 修改年:
[AppleScript] 纯文本查看 复制代码
1
calendar.set(Calendar.YEAR, 2000);
// 修改月:
[AppleScript] 纯文本查看 复制代码
1
calendar.set(Calendar.MONTH, 0);
// 日期增加一天:
[AppleScript] 纯文本查看 复制代码
1
calendar.add(Calendar.DAY_OF_MONTHY, 1);
// 日期减少一天:
[AppleScript] 纯文本查看 复制代码
?
1
calendar.add(Calendar.DAY_OF_MONTHY, -1);
4.0  System类
[AppleScript] 纯文本查看 复制代码
1
currentTimeMillis()
java.lang.System类: 系统相关功能
// 静态方法
[AppleScript] 纯文本查看 复制代码
1
static long currentTimeMillis(): 返回当前系统时间的毫秒值
/*
需求:
写一个for循环, 打印10万次"我爱Java", 统计运行时间
*/
[AppleScript] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
// 先记录开始时间毫秒值
long start = System.currentTimeMillis();
// 循环
for (int i = 0; i < 100000; i++) {
System.out.println("我爱Java " + i);
}
// 循环结束后记录结束时间毫秒值
long end = System.currentTimeMillis();
// 显示结果
System.out.println("程序执行时间: " + (end - start) + "毫秒");
arrayCopy(王者荣耀电竞项目居然能做为亚运会 src, int srcPos, 王者荣耀电竞项目居然能做为亚运会 dest, intdestPos, int length)
java.lang.System类: 系统相关功能
// 静态方法
[AppleScript] 纯文本查看 复制代码
1
2
3
4
5
6
7
static void arrayCopy(王者荣耀电竞项目居然能做为亚运会 src, int srcPos, 王者荣耀电竞项目居然能做为亚运会dest, int destPos, int length): 复制源数
组中指定长度个元素到一个新数组中
* 王者荣耀电竞项目居然能做为亚运会 src: 源数组 (被复制的数组)
* int srcPos: 源数组索引 (从源数组的哪个索引开始复制)
* 王者荣耀电竞项目居然能做为亚运会 dest: 目标数组 (要复制到哪个数组)
* int destPos: 目标数组索引 (指定目标数组接收元素的索引位置)
* int length: 长度 (要复制的元素个数)
5.0  StringBuilder类
+号拼接字符串的问题:
String是不可变的, 使用加号进行字符串拼接, 会创建很多额外的对象, 浪费内存空间
####*****实际上+加号在最终执行时, 会被翻译为:
new StringBuilder("原字符串").append("要拼接的字符串").toString();
额外创建了多余的StringBuilder对象
总结
[AppleScript] 纯文本查看 复制代码
1
java.lang.StringBuilder类: 可变字符序列, 可以高效拼接字符串.底层使用数组保存
// 构造方法
[AppleScript] 纯文本查看 复制代码
1
2
StringBuilder(): 构造一个空的StringBuilder容器
StringBuilder(String str): String转StringBuilder

常用方法
[AppleScript] 纯文本查看 复制代码
1
java.lang.StringBuilder类: 可变字符序列, 可以高效拼接字符串.底层使用数组保存
// 常用方法
[AppleScript] 纯文本查看 复制代码
1
2
StringBuilder append(任意类型): 添加任意类型数据的字符串形式, 并返回当前对象
String toString(): 将当前StringBuilder对象转换为String对象
补充
[AppleScript] 纯文本查看 复制代码
1
2
3
String和StringBuilder互转: 利用StringBuilder
StringBuilder(String str): String转StringBuilder
String toString(): StringBuilder转String

举例
[AppleScript] 纯文本查看 复制代码
1
2
3
4
5
StringBuilder sb = new StringBuilder();
// 链式调用
sb.append(123).append(true).append("你好Java");
// 转换为String
String s = sb.toString();
6.0  包装类
H:/%E6%9C%89%E9%81%93%E7%AC%94%E8%AE%B0/chibei89@163.com/193e57ee437c49d6b7cdfe7cd5c0d8bc/clipboard.png
6.1  自动装箱与自动拆箱
// 自动装箱原理
[AppleScript] 纯文本查看 复制代码
1
Integer i2 = Integer.valueOf(4);
//使用包装类中的valueOf方法
// 自动拆箱原理
[AppleScript] 纯文本查看 复制代码
1
int num = i.intValue();
补充
// 以下代码哪里涉及了自动装箱与自动拆箱
[AppleScript] 纯文本查看 复制代码
1
2
3
Integer i = 10; // 自动装箱: Integer i =Integer.valueOf(10);
Integer j = 20; // 自动装箱: Integer j =Integer.valueOf(20);
Integer k = i + j; // 先拆箱再装箱: Integer k =Integer.valueOf(i.intValue() + j.intValue());
6.2  包装类常用方法: 基本类型与字符串之间转换
基本类型转为String: 拼接空字符串
"" + 34
true + ""
String转基本类型: 利用包装类的静态方法
[AppleScript] 纯文本查看 复制代码
1
2
3
4
5
6
7
static byte parseByte(String s): 将字符串参数转换为对应的byte基本类型
static short parseShort(String s): 将字符串参数转换为对应的short基本类型 Short
static int parseInt(String s): 将字符串参数转换为对应的int基本类型 Integer
static long parseLong(String s): 将字符串参数转换为对应的long基本类型
static float parseFloat(String s): 将字符串参数转换为对应的float基本类型
static double parseDouble(String s): 将字符串参数转换为对应的double基本类型
static boolean parseBoolean(String s): 将字符串参数转换为对应的boolean基本类型
7.0  Collection
集合: 长度可变容器, 可以存储多个对象
集合和数组的区别:
1. 数组长度不可变; 集合长度可变
2. 数组可以存基本类型或引用类型, 只能存同一种类型; 集合只能存储引用类型元素, 可以是多种类型元素
7.1  集合框架介绍
[AppleScript] 纯文本查看 复制代码
1
2
3
4
5
6
7
Collection接口: 单列集合顶层
|_ List接口: 元素存取有序, 可重复, 有索引
|_ Set接口: 元素存取无序, 不可重复, 无索引
ArrayList<String> add("aaaa")add("bbb") add("ccc") add("ccc")
"aaaa" "bbb" "ccc"
HashSet<String> add("aaaa")add("bbb") add("ccc")
"bbb" "ccc" "aaaa"

学习方法:
学习顶层: 顶层接口/抽象类中共性的方法, 所有子类都可以使用
使用底层: 使用底层子类/实现类创建对象
file:///C:\Users\Administrator\AppData\Local\Temp\msohtmlclip1\01\clip_image001.gif
file:///C:\Users\Administrator\AppData\Local\Temp\msohtmlclip1\01\clip_image001.gif
7.2  Collection常用功能
java.util.Collection接口:
// 成员方法(子类都会实现)
[AppleScript] 纯文本查看 复制代码
?
1
2
3
4
5
6
7
8
9
boolean add(E e): 把给定的对象添加到当前集合中
void clear(): 清空集合中所有的元素
boolean remove(E e): 把给定的对象在当前集合中删除
boolean contains(E e): 判断当前集合中是否包含给定的对象
boolean isEmpty(): 判断当前集合是否为空(没有元素)
int size(): 返回集合中元素的个数
王者荣耀电竞项目居然能做为亚运会[] toArray(): 把集合中的元素,存储到数组中
Iterator<E> iterator(): 获取集合的迭代器对象 (后面讲到)
Iterator接口: 迭代器
测试Collection接口的方式:
使用多态方式创建对象: 
[AppleScript] 纯文本查看 复制代码
1
Collection c =new ArrayList();
编译看左边, 这样只能调用Collection接口中定义的方法, 不会出现子类特有方法
8.0  迭代器
8.1  迭代器Iterator接口介绍和迭代步骤
迭代: 类似于遍历, 判断是否有下一个元素, 有则取出下一个, 直到没有
迭代器: 用于遍历集合的对象
java.util.Collection<E>接口:
// 成员方法(子类都会实现)
[AppleScript] 纯文本查看 复制代码
1
2
Iterator<E> iterator(): 获取集合的迭代器对象
java.util.Iterator<E>接口: 迭代器
// 成员方法
[AppleScript] 纯文本查看 复制代码
1
2
3
boolean hasNext(): 判断是否有下一个元素
E next(): 获取下一个元素
void remove(): 删除next指向的元素
8.11使用迭代器遍历集合的3步:
1. 使用集合对象的 iterator() 获取迭代器对象, 用 Iterator 接口接收.(多态)
2. 使用 Iterator 接口中的 hasNext() 方法, 判断是否有下一个元素
3. 使用 Iterator 接口中的 next() 方法, 获取下一个元素
<>使用迭代器遍历集合的标准写法:
[AppleScript] 纯文本查看 复制代码
1
2
3
Iterator<元素类型> iterator = 集合对象.iterator();
while (iterator.hasNext()) {
元素类型 变量名 =iterator.next();
8.2  迭代器的实现原理
集合和迭代器对象的关系:
每个集合都有对应的一个迭代器对象
迭代器的原理:
[AppleScript] 纯文本查看 复制代码
1
2
hasNext() 方法可以判断下一个索引是否有元素
next() 方法移动指针到下一个索引, 并返回元素
注意事项:
1. 迭代器对象迭代完毕后, 指针已经指向最后一个元素, 没有下一个元素了. 如果想再次从头遍历集合, 要获取新的迭代器对象
2. 在使用迭代器迭代的过程中, 如果执行了改变集合长度的操作 (如add(),remove(), clear()), 则会抛出ConcurrentModificationException 并发修改异常. 如果要在迭代的过程中添加, 删除元素, 要使用迭代器自带的方法, 而不能使用集合的方法
9.0  增强for循环
作用:
遍历数组 遍历集合
9.1  增强for格式:
[AppleScript] 纯文本查看 复制代码
1
2
3
for(元素的数据类型变量名 : Collection集合或数组名){
//操作代码
}
对数组只是写法上的优化, 底层还是普通for循环
对集合是通过迭代器实现
9.2  增强for, 普通for, 迭代器的区别:
增强for:
优点: 获取元素很方便, 格式简单
缺点: 没有普通for中的索引, 没有迭代器对象可以进行元素的增删
应用场景: 适用于遍历获取数组和集合元素的场景
普通for:
优点: 有索引可以使用, 某些方式可以在遍历过程中增删元素
缺点: 格式繁琐
应用场景: 需要用到索引的场景
迭代器:
优点: 可以使用迭代器对象的方法操作元素
缺点: 格式繁琐
应用场景: 需要在迭代过程中增删元素的场景
10.0  泛型
泛型可以看作是一个变量, 用来接收数据类型
不使用泛型的问题:
集合实际存储的是 王者荣耀电竞项目居然能做为亚运会 类型, 存入的元素无论是什么类型, 都会被提升为 王者荣耀电竞项目居然能做为亚运会, 取出来的也是 王者荣耀电竞项目居然能做为亚运会,要想调用元素特有方法, 就要向下转型, 有可能发生类型转换异常 ClassCastException
泛型的好处:
1. 避免了类型转换的麻烦
2. 将运行时的类型转换异常, 转移到了编译时期 (有利于程序员提前发现问题)
10.1定义含有泛型的方法与使用
方法中的泛型定义位置:
修饰符 和 返回值类型 之间
// 带有泛型的方法定义格式
修饰符 <代表泛型的名字>返回值类型 方法名(参数){}
方法中定义泛型后, 返回值类型和参数类型都可以使用泛型
方法泛型的使用:
在调用方法时确定泛型的具体类型
10.2  定义与使用含有泛型的接口
定义泛型接口与定义泛型类一样
<> 带有泛型的类定义格式
修饰符 interface接口名<代表泛型的变量> {
}
举例:
[Java] 纯文本查看 复制代码
1
2
3
public interfaceGenericInterface<I> {
public abstract void method(I i);
}

10.21  实现类实现了泛型接口后可以有2种选择:
1. 定义实现类时就确定泛型的具体类型
举例:
[AppleScript] 纯文本查看 复制代码
?
1
2
3
4
public class GenericInterfaceImpl1implements GenericInterface<String>{
@Override
public void method(String s) {
System.out.println(s);}}

2. 定义实现类时仍然沿用泛型, 直到创建该类对象时才确定泛型的具体类型
举例:
[AppleScript] 纯文本查看 复制代码
1
2
3
4
public class GenericInterfaceImpl2<I>implements GenericInterface<I> {
@Override
public void method(I i) {
System.out.println(i);}}
/*
测试含有泛型的接口
*/
[AppleScript] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
public class Demo04GenericInterface {
public static void main(String[] args) {
//创建GenericInterfaceImpl1对象
GenericInterfaceImpl1 gi1 = new GenericInterfaceImpl1();
gi1.method("字符串");
//创建GenericInterfaceImpl2对象
GenericInterfaceImpl2<Integer> gi2= new GenericInterfaceImpl2<>();
gi2.method(10);
GenericInterfaceImpl2<Double> gi3= new GenericInterfaceImpl2<>();
gi3.method(8.8);}}

10.3  泛型定义总结:
定义在类上的泛型:
有效范围: 整个类中都有效
何时确定具体类型: 创建该类对象时确定泛型的具体类型
定义在方法上的泛型:
有效范围: 方法中(包括返回值类型和参数类型)有效
何时确定具体类型: 调用方法传参时确定泛型的具体类型
定义在接口上的泛型:
有效范围: 接口中
何时确定具体类型:
1. 子接口或实现类定义时确定泛型的具体类型
2. 创建实现类对象时确定泛型的具体类型
10.4  泛型通配符:
不知道使用什么类型来接收时, 此时可以使用 <?> 来表示未知通配符
示例: List<?> list 接收泛型是任意类型的List对象
注意: 只能接收数据, 不能调用方法存储元素
[AppleScript] 纯文本查看 复制代码
1
2
3
List<?> list 这种集合不能调用 add() 添加元素, 只能调用 get() 获取元素
List<?> list 其实是一个变量, 所以可以将一个集合赋值给它
: List<?> list =new ArrayList<String>();
使用方式:
不能创建对象使用
只能作为方法参数使用. (减少方法重载)
泛型的上限:
[AppleScript] 纯文本查看 复制代码
1
2
3
[font=微软雅黑][size=3][color=#df402a]格式: 类型名称<? extends 类名> 对象名称[/color][/size][/font]
示例: List<? extendsNumber> list
作用: 只能接收该类型及其子类 (Number及其子类的泛型)
泛型的下限:
[AppleScript] 纯文本查看 复制代码
1
2
3
格式: 类型名称<? super 类名> 对象名称
示例: List<? superNumber> list
作用: 只能接收该类型及其父类型 (Number及其父类的泛型)
11.0   练习
一、不运行代码,直接说出打印结果,并解释原因。
   
[AppleScript] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
static int i = 1;  
public static void main(String args[]){     
System.out.println("love " + new ToStringTest());//love java       
ToStringTest a = new ToStringTest();       
a.i++;     
System.out.println("me " + a.i);//me 2    }  
public String toString(){       
System.out.print("I ");//I        return "java ";  
}
运行结果:I love java    me 2
解析:
System.out.println("love " + new ToStringTest());输出结果为字符串+;   先调用toString方法,本类中已经重写toString方法,应先调用重写的toString方法.
二、看下列程序,不运行说结果,写出答案后,并在IntelliJ IDEA中运行看看自己给的答案与运行结果是否正确,并分析原因。
1>   
[Java] 纯文本查看 复制代码
1
2
3
4
String s1 = "abc";              
    String s2 = "abc";              
    System.out.println(s1 == s2);         //true              
    System.out.println(s1.equals(s2));    //true

2>      
[Java] 纯文本查看 复制代码
1
2
3
4
String s1 = "a" + "b" + "c";          
      String s2 = "abc";        
      System.out.println(s1 == s2);                  //true       
      System.out.println(s1.equals(s2));     //true

3>   
[Java] 纯文本查看 复制代码
1
2
3
4
5
String s1 = "ab";        
    String s2 = "abc";     
    String s3 = s1 + "c";    
    System.out.println(s3 == s2);         //false     
    System.out.println(s3.equals(s2));    //true
解析:
[Java] 纯文本查看 复制代码
1
2
3
4
5
1>   中的"abc"均取自堆中常量池.
2>   s1="a" + "b" + "c"="abc";
"a" + "b" + "c"取自于常量池,与"abc"相同;
3>  s1="ab";    s3 = s1 + "c";
s1是变量,在堆中,而不在常量池中.




作者:传智播客javaEE培训学院

首发:http://java.tianfu2024.sbs/


0 分享到:
和我们在线交谈!