Java第二次上机随笔

news/2024/7/4 9:23:29

主要是一些原来不懂但是本次上机涉及到的内容...

一、空数组与数组为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

转载于:https://www.cnblogs.com/PineZhuo/p/10479523.html


http://www.niftyadmin.cn/n/3458665.html

相关文章

爬虫-第二篇-数据解析

数据解析 解析:根据指定的规则对数据进行提取作用:实现聚焦爬虫聚焦爬虫的编码流程: 指定url发起请求获取响应数据数据解析持久化存储数据解析的方式: 正则bs4xpathpyquery(拓展)数据解析的通用原理是什么? 数据解析需要作用在页面源码中(一组html标签组成的)html的核心作用是…

考试防刷新、切屏效果实现

情景 在线考试模块这样一个需求: 避免学生用电脑查答案, 需要系统防止刷新、切屏或改变窗口大小,当达到次数后自动交卷。 实现 1,仿刷新。 因为浏览器都自带了刷新返回等按钮,因此只想到了弹出窗口的形式。 /* * param url 考试界面的链接 *…

Position属性四个值:static、fixed、absolute和relative的区别和用法(转自博友 Newbie_小白)...

在用CSSDIV进行布局的时候,一直对position的四个属性值relative,absolute,static,fixed分的不是很清楚,以致经常会出现让人很郁闷的结果。今天研究了一下,总算有所了解。在此总结一下: 先看下各个属性值的定义: 1、sta…

爬虫-第三篇-代理,cookie,验证码,线程池

图片懒加载 有些图片网站img标签用了伪src属性,在页面加载时不会一次性加载所有图片,获取图片链接时,要注意img标签的属性,如下图,属性被修改为src2 代理 在短时间内向网站发起了一个高频的请求,会产生ConectionPool的Error,连接池(http)中的资源被耗尽,可以在请求头中设置Conn…

使用ApiPost模拟发送get、post、delete、put等http请求

现在的模拟发送请求插件很多比如老外的postman等,但亲测咱们国内的 ApiPost 更好用一些,因为它不仅可以模拟发送get、post、delete、put请求,还可以导出文档,支持团队协作也是它的特色。 另外老外的思维跟我们还是有些鸿沟&#x…

爬虫-第五篇-scrapy框架初识,持久化存储,手动请求发送

准备工作 什么是框架?如何学习框架? 就是一个集成了各种功能且具有很强通用性(可以被应用在各种不同的需求中)的一个项目模板.scrapy集成了哪些功能: 高性能的数据解析操作,持久化存储操作,高性能的数据下载的操作.....环境的安装: a. pip3 install wheelb. 下载twisted http…

出来混迟早要还的,技术债Dagger2:Android篇(上)

前言 因为工作需求,所以最近补了补之前没了解过的Dagger2的内容,基础篇已经发布。接下来就是Dagger2在Android中的应用了。当然,和我一样刚接触Dagger2的朋友,可以先看一下之前的基础文章: 出来混迟早要还的&#xff0…

JVM学习笔记之认识JDK(一)

1. HotSpot VM: HotSpot VM是Sun JDK和OpenJDK中所带的虚拟机,也是目前使用范围最广的Java虚拟机。 什么是HotSpot VM & 深入理解Java虚拟机 JVM? 提起HotSpot VM,相信所有Java程序员都知道,它是Sun JDK和OpenJDK中所带的虚拟…