• 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

  • 相关阅读:
    JeeSite4.x 搭建并部署到服务器
    maven编译时出现There are test failures
    ecplise An incompatible version [1.2.14] of the APR based Apache Tomcat Native library is installed, while T
    maven "mvn不是内部或外部命令,也不是可运行的程序或批处理文件"
    rar自动压缩备份
    mysql 0x80004005 unable to connect to any of the specified mysql hosts
    mysql too many connections
    输出控制台信息到日志 并 通过cronolog对tomcat进行日志切分
    Node.js相关——package概念及NPM
    Node.js相关——CommonJS规范
  • 原文地址:https://www.cnblogs.com/PineZhuo/p/10479523.html
Copyright © 2020-2023  润新知