Java第二次上机随笔
主要是一些原来不懂但是本次上机涉及到的内容...
一、空数组与数组为null的区别
1、空数组:
int[] array = new int[0];
array.length == 0;
空数组是一个真正的数组,只不过长度为0,它是一个真正的对象。
2、数组是null
null数组是一个空引用,只定义了一个数组,但是没有实例化,并不是一个对象
int[] array = null;
二、可变参数
适用于参数个数不确定,类型确定的情况,java把可变参数当做数组处理。
注意:可变参数必须位于最后一项。
调用可变参数的方法时,编译器为该可变参数隐含创建一个数组,在方法体中以数组的形式访问可变参数。
下面是一个例子,该方法的参数可以是一个或者多个String
public static String strscat(String... args) {
String x = new String();
for(String s: args) {
x = x + s;
}
return x;
}
三、Java对象实例是作为引用存在的

四、浅拷贝vs深拷贝
浅拷贝是指在拷贝对象时,对于基本数据类型的变量会重新复制一份,而对于引用类型的变量只是对引用进行拷贝,没有对引用指向的对象进行拷贝。
而深拷贝是指在拷贝对象时,同时会对引用指向的对象进行拷贝。
区别就在于是否对 对象中的引用变量所指向的对象进行拷贝。
具体样例请参考这篇博客:https://www.cnblogs.com/dolphin0520/p/3700693.html
五、String类的==和equals()方法
首先应该明确String对象的两种生成方式:
1、作为基本类型使用 String str1 = “aaa”;这时会在String缓冲池中寻找与str1内容相同的String对象,如果有,直接将该对象的引用赋值给str1,没有则new一个对象,相当于第二种生成对象的方式;
2、用new来创建一个新对象,这时会分配一个新的内存堆:String str2 = new String(“abcdefg”);
String有两种比较方式:==和equals():
“==”比较的是针对两个String类型的变量的引用,也就是说如果两个String类型的对象指向同一个内存堆,则返回true,在上面的例子中,如果String缓冲池中已经有内容为“aaa”的对象(假设名称为str3),则str1 == str3 返回true
用Object对象的equals()方法String对象继承自Object,并且对equals方法进行了重写,用此方法进行比较时,其实是对String对象封装的字符串内容进行比较,相同返回true。 也就是说,不考虑内存堆的情况,仅考虑对象的内容。
下面举几个例子:
①
String str1 = new String("aaa");
String str2 = "aaa";//在缓冲池中找到'aaa",因此str2与str1指向同一个内存堆
str1 == str2;//true
str1.equals(str2);//true
②
String str1 = "aaa";//缓冲池中找不到"aaa",则new一个对象,相当于第一个例子中的操作
String str2 = "aaa";//缓冲池中找到"aaa",str2与str1指向同一个内存堆
str1 == str2;//true
str1.equals(str2);//true
③
String str1 = new String("aaa");
String str2 = new String("aaa");
str1 == str2;//false,两个都是new出来的对象,指向不同的内存堆
str1.equals(str2);//true,内容相同
④
String str1 = "a" + "b" + "c";//缓冲池中找不到"abc",则new一个对象,相当于第一个例子中的操作
String str2 = "abc";//缓冲池中找到"abc",str2与str1指向同一个内存堆
str1 == str2;//true
str1.equals(str2);//true
⑤
String str = "ab";
String str1 = "abc";
String str2 = s + "c";
str1 == str2;//false,因为str是变量,那么str无论是和常量还是和其他变量相+,在源码里面得到的新串,都是new出来的一个新的String,这个String是放在堆里面的。既然是new 出来的,那自然不是同一个对象。
str1.equals(str2);//true
其实单独拎出来的话,每一个点都能写一篇详细的博客,不过,懒癌晚期没救了QAQ
Java第二次上机随笔的更多相关文章
- JAVA第二次作业展示与学习心得
JAVA第二次作业展示与学习心得 在这一次作业中,我学习了复选框,密码框两种新的组件,并通过一个邮箱登录界面将两种组件运用了起来.具体的使用方法和其他得组件并没有什么大的不同. 另外我通过查阅资料使用 ...
- Java第二周作业
Java第二周作业 本周作业: 参考http://www.cnblogs.com/rocedu/p/7911138.html 学习第二三章视频 参考http://www.cnblogs.com/roc ...
- 2018-03-11 20165235 祁瑛 Java第二周考试总结
20165235 祁瑛 Java第二周考试总结 课后习题p16 代码编写 class Person { void speakHello (){ System.out.print("nin h ...
- java第二周的作业
package java第二周学习; import javax.swing.JOptionPane; public class 数学题 { private int a; private int b; ...
- Java 第二次测试总结
Java 第二次测试总结 1. 相关知识点总结 Java测试题循环与递归知识点 补充知识点: for循环语句:for(表达式1:表达式2:表达式3)表达式一负责完成变量的初始化!表达式2是值为bool ...
- SDN 第二次上机作业
SDN第二次上机作业 1.控制器floodlight所示可视化图形拓扑的截图,及主机拓扑连通性检测截图 拓扑 连通性 2.利用字符界面下发流表,使得'h1'和'h2' ping 不通 流表截图 连通性 ...
- “全栈2019”Java第二章:安装JDK11(Windows)
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 文章原文链接 "全栈2019"Java第二章:安装JDK11(Windows) 下一 ...
- 20155210潘滢昊 Java第二次试验
20155210潘滢昊 Java第二次试验 实验内容 学会JunitTest的使用 实验代码 MyUtilTest代码: import org.junit.*; import junit.framew ...
- “全栈2019”Java第二十九章:数组详解(中篇)
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
随机推荐
- python全栈开发day118-Mui
1.什么是Mui Mui是前端布局框架 封装了HTML5PLUS HTML5PLUS是移动操作系统的调用接口 2.Mui代码块,用于快速构建Mui组件 1).打开一个窗口 Mui.openWindow ...
- JMeter调试参数是否取值正确,调试正则提取的结果(log.info|log.error|print)
JMeter调试参数是否取值正确,调试正则提取的结果(log.info | log.error | print) Jmeter的log输出控制(jmeter.log) 1 2 log_level.jm ...
- Codeforces 959F Mahmoud and Ehab and yet another xor task 线性基 (看题解)
Mahmoud and Ehab and yet another xor task 存在的元素的方案数都是一样的, 啊, 我好菜啊. 离线之后用线性基取check存不存在,然后计算答案. #inclu ...
- Linux下crontab计划任务使用详解
Linux在相应用户下,用crontab -l 命令可以查看该用户定时执行的任务,-e可以编辑,但是其真实文件在哪儿呢??以CentOS为例,其真实的位置在:/var/spool/cron下面,有执行 ...
- BZOJ.4842.[NEERC2016]Delight for a Cat(费用流)
BZOJ 参考这儿. 首先如果一个活动的时间满足条件,那么另一个活动也一定满足.还有就是这题就是费用流没有为什么.不妨假设最初所有时间都用来睡觉,那么我们要对每个\(k\)大小区间选出\([t2,k- ...
- Java学习之软件安装
成功安装了jdk-10.0.1.eclipse-committers-2018-09-win32-x86_64.mysql-5.7.18.1和tomcat-9.0.0.M17
- django默认模板引擎和jinja2模板引擎
在使用中,大家会发现django默认模板引擎有很多局限性,最明显的就是四则运算.就只能加减,乘除都不支持.另外还有判断相等,不能直接if,要用ifequal.确实不太方便.还有一点,django默认模 ...
- MyBatis(十一) 嵌套结果集的方式,使用collection标签定义关联的集合类型的属性封装规则
(1)接口中编写方法 public Dept getDeptPlusById(Integer id); (2)Mapper文件 <resultMap type="com.eu.bean ...
- go-mod 入门
Q群有人问go mod 问题,自己也忘了些.顺便再整理下. GO111MODULE可以设置为三个字符串值之一:off,on或auto(默认值). off 则go命令从不使用新模块支持.它查找vendo ...
- go语言的for循环
for循环是一个循环控制结构,可以执行指定次数的循环. 三种循环方式 第一种,常见的 for 循环,支持初始化语句 for init; condition; post { } init: 一般为赋值表 ...