• Java 学习笔记 ------第四章 认识对象


    本章学习目标:

    • 区分基本类型与类类型
    • 了解对象与参考的关系
    • 从打包器认识对象
    • 以对象观点看待数组
    • 认识字符串的特性

    一、“=” 和 “==”

    当=用于基本类型时,是将值复制给变量,当==用于基本类型时,是比较两个变量储存的值是否相同,如下面的程序:

    int a = 10;
    int b = 10;
    int c = a;
    System.out.println(a == b);    //显示true
    System.out.println(a == c);    //显示true
    

    如果你在操作对象,=是用在指定参考名称参考某个对象,而==是用在比较两个参考名称是否参考同一对象。

    BigDecimal a = new BigDecimal("0.1");
    BigDecimal b = new BigDecimal("0.1"); 
    BigDecimal c = a;
    System.out.println(a == b);   //显示false
    System.out.println(a == c);   //显示true
    System.out.println(a.equals(b));    //显示true
    

    从内存的角度来说,值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中。
    ==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。
    equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。
    ==比较的是两个对象的地址,而equals比较的是两个对象的内容。

    二、基本类型打包器

    Java中有两个类型系统,即基本类型与类类型,使用基本类型目的在于效率,然而更多时候,会使用类建立实例,因为对象本身可以携带更多信息,如果要让基本类型像对象一样操作,可以使用Long、Integer、Double、Float、Boolean、Byte等类来打包(Wrap)基本类型。

    public class IntegerDemo {
    	public static void main(String[] args) {
    		int data1 = 10;
    		int data2 = 10;
    		Integer wrapper1 = new Integer(data1);  //打包基本类型
    		Integer wrapper2 = new Integer(data2);
    		System.out.println(data1 / 3);   //基本类型运算
    		System.out.println(wrapper1.doubleValue() / 3);    //操作打包器方法
    		System.out.println(wrapper1.compareTo(wrapper2));
    
    	}
    }
    
    output:
    3
    3.3333333333333335
    0
    
    

    除了使用new创建基本类型打包器之外,从J2SE 5.0之后提供了自动装箱功能和自动拆箱功能。

    //Autoboxing
    int i = 10;
    Integer wrapper = i;
    Number number = 3.14f;
    
    //Auto Unboxing
    Integer wrapper = 10;
    int foo = wrapper;  
    

    三、数组

    数组在Java中就是对象。

    数组的两种遍历方式:
    1.使用for循环,通过使用length属性获取数组长度

    int[] scores = { 88, 81, 74, 68, 78 };
    for (int i = 0; i < scores.length; i++) {
    	System.out.printf("学生分数:%d %n",scores[i]);
    }
    

    2.使用增强式for循环

    for(int score:scores){
    	System.out.printf("学生分数:%d %n",score);
    }
    

    数组的创建:

    int[] intArray;   //creating array without initializing or specifying size
    int intArray1[];  //another int[] reference variable can hold reference of an integer array
    int[] intArray2 = new int[10]; //creating array by specifying size
    int[] intArray3 = new int[]{1,2,3,4}; //creating and initializing array in same line.
    

    java.util.Arrays类能方便地操作数组,它提供的所有方法都是静态的。具有以下功能:

    • 给数组赋值:通过fill方法。
    • 对数组排序:通过sort方法,按升序。
    • 比较数组:通过equals方法比较数组中元素值是否相等。
    • 查找数组元素:通过binarySearch方法能对排序好的数组进行二分查找法操作。

    java.lang.System类提供了实用方法拷贝元素到另一个数组。在拷贝内容从一个数组到另一个数组的时候System.arrayCopy非常强大和灵活。你可以拷贝整个或子数组,具体看你的需求。

    public static void main(String args[]) {
            int[] source = new int[]{10, 20, 30, 40, 50};
            int[] target = new int[5];
     
            System.out.println("Before copying");
            for(int i: target){
                System.out.println(i);
            }
     
            System.arraycopy(source, 0, target, 0, 3);
     
            System.out.println("after copying");
            for(int i: target){
                System.out.println(i);
            }
        }
    Output:
    Before copying
    0
    0
    0
    0
    0
    after copying
    10
    20
    30
    0
    0
    

    四、字符串

    书上的内容已然非常详细,这里附上一篇importnew上的文章(浅谈Java字符串,http://www.importnew.com/16881.html)。
    文章内详细讲解了String、StringBuffer和StringBuilder的性质和比较,以及方法和性能分析。

    五、查阅API

    从这一章开始,Java的学习逐渐走入了类和对象这个范畴,本章学习了大量的类以及部分方法,通过查阅相关API可以获取这些类的其他方法的使用方式,多查阅API非常有助于学习Java。http://www.yq1012.com/api/

  • 相关阅读:
    《Java从入门到放弃》入门篇:Struts2的基本数据传递方式
    《Java从入门到放弃》入门篇:Struts2的常用基本标签
    《Java从入门到放弃》入门篇:Struts2的基本访问方式(二)
    《Java从入门到放弃》入门篇:Struts2的基本访问方式
    《Java从入门到放弃》入门篇:XMLHttpRequest的基本用法
    Unity 从StreamingAssets文件夹和PersistentData文件夹 保存读取AssetBundle资源 路径详解
    海外版本修改总结
    unity A*寻路 (三)A*算法
    unity A*寻路 (二)读取NavMesh数据
    unity A*寻路 (一)导出NavMesh数据
  • 原文地址:https://www.cnblogs.com/xiaoYu3328/p/5226365.html
Copyright © 2020-2023  润新知