• 【学习笔记】 唐大仕—Java程序设计 第5讲 深入理解Java语言之5.8 没有指针的Java语言


    /**
    * 没有指针的Java语言 学习笔记
    * @author cnRicky
    * @date 2018.11.11
    */

    没有指针的Java语言

    引用与指针
    • 引用(reference)实质就是指针(pointer)
    • 但是它是受控的、安全的
    • 比如
      • 会检查指针是否为空
      • 没有指针运算*(p+5);
      • 不能访问没有引用到的内存
      • 自动垃圾回收
    C语言指针在Java中的体现
    • (1)传地址(C) -> 对象(Java)

      • 引用类型,引用本身就相当于指针
        • 可以用来修改对象的属性、调用对象的方法
      • 基本类型(primitive type):没有对应的
        • 如交换两个整数
        • void swap(int x, int y){ int t = x; x = y; y = t; }
        • int a = 8, b = 9; swap(a, b);
        • 一种变通的办法,传出一个有两个分量x,y的对象
    • (2)指针运算(C) -> 数组(Java)

      • *(p+5) 则可以用args[5]
    • (3)函数指针 -> 接口、Lambda表达式

    • (4)指向结点的指针 -> 对象的引用

    class Node{
        Object date;
        Node next;
    }
    
    • 使用JNI
      • Java Native Interface(JNI)
      • 它允许Java代码和其他语言写的代码进行交互
    相等还是不等
    • ==
    • 简单地说,基本类型是值相等,引用类型是引用相等(两个引用是否引用到了同一个对象实体上)
    • 但有不少具体情况需要具体分析
    基本类型的相等
    • 基本类型
      • 数值类型:转换后比较
      • 浮点数,最好不直接用==
      • Double.NAN == Double.NAN 结果为false
        • 请参见JDK的API文档
      • boolean型无法与int相比较
    思考实例
    Integer i = new Integer(10);
    Integer j = new Integer(10);
    System.out.println(i==j);//false,因为对象是两个
    
    Integer m = 10;
    Integer n = 10;
    System.out.println(m==n);//true,因为对象有缓存
    
    Integer p = 200;
    Integer q = 200;
    System.out.println(p==q);//false,因为对象是两个
    
    • 注意缓存这种机制
    枚举、引用对象是否相等
    • 枚举类型

      • 内部进行了唯一实例化,所以可以直接判断
    • 引用对象

      • 是直接看两个引用是否一样
      • 如果要判断内容是否相等,则要写equals方法
      • 如果重写equals方法,则最好重写hasCode()方法
    String对象的特殊性
    • String对象
      • 判断相等,一等不要用==,要用equals
      • 但是字符串常量(String literal)及字符串常量会进行内部化(interned),相同的两个字符串常量是可以用==来做比较的
  • 相关阅读:
    (hash) leetcode 49. Group Anagrams
    (Manacher Algorithm, 中心拓展法,动态规划) leetcode 5. 最长回文串
    (KMP) leetcode 28. Implement strStr() 字符串匹配
    (字符串,哈希) leetcode 8. atoi,12. Integer to Roman
    (贪心) leetcode 435 Non-overlapping Intervals, 455 design cookies
    (Divide and Conquer) Closest Pair of Pairs
    (栈,双端队列,双指针) leetcode. 844 Backspace String Compare
    write、writelines
    *、**
    inf
  • 原文地址:https://www.cnblogs.com/dreamcoding/p/9942465.html
Copyright © 2020-2023  润新知