没有指针的Java语言
2015-08-30 19:06
232 查看
引用与指针
引用(reference)实质就是指针(pointer)但它是受控的,安全的,如
会检查空指针
没有指针运算:
*(p+5),因为很容易造成内存的错误访问
不能访问没有引用到的内存
自动回收垃圾
C语言指针在Java中的体现
C: 传地址 -> Java: 对象引用类型,引用本身就相当于指针
可以用来修改对象的属性、调用对象的方法
基本类型:没用对应的应用
如交换两个整数,不用C中的指针就没法达到交换的目标,一种变通的方法是:传出一个有两个分量x,y的对象
指针运行 -> 数组
*(p+5) 怎可以用 args[5]
函数指针 -> 接口(本质上是一个安全的约定)、Lambda表达式
例如:求积分,线程,回调函数,事件处理
指向结点的指针 -> 对象的引用
class Node{ Object data; Node next; }
使用JNI
Java Native Interface(JNI)
它允许Java代码和其他语言写的代码进行交互,可以调用其它语言代码,如C语言中的头文件等。Java在最底层要调用操作系统的api,用的就是JNI。
相等还是不等
==
简单地说,基本类型是值相等,引用类型是引用相等,即是否引用到同一个对象。
基本类型的相等
数值类型:转换后比较浮点数,最好不直接用
==,因为浮点数很多情况下存在误差
Double.NAN == Double.NAN结果是false,他们是“不是数的数”
boolean型无法与int比较
Integer i = new Integer(10); // 将10包装成引用 Integer j = new Integer(10); System.out.println(i == j); // false,因为比较的是两个不同的对象 // 此时本质上是使用valueof函数,该函数有一个-128~127的对象的缓存 Integer m = 10; Integer n = 10; System.out.println(i == j); // true,因为对象有缓存 Integer p = 200; Integer q = 200; System.out.println(i == j); // false,因为比较的是两个不同的对象
枚举、引用对象是否相等
枚举类型内部进行了唯一实例化,所以可以直接判断
引用对象
是直接看两个引用是否一样
如果要判断内容是否一样,则要重写
equals方法
如果要重写此方法,则最好重写
hashCode()方法
String对象的特殊
判断相等,一定不用要==,而是要用
equals
但是字符串常量(String literal)及字符串常量会进行内部化(interned),相同的字符串常量是可以用
==的
public class TestStringEquals{ public static void main(String[] args) { String hello = "Hello", lo = "lo"; // 凡是相同的字符串常量Hello被合并到一个相同的字符串中 // 即指向相同的地方 System.out.println(hello == "Hello"); System.out.println(Other.hello == hello); // ("Hel" + "lo")在编译时,已经被合并成字符串Hello了 System.out.println(hello == ("Hel" + "lo")); // ("Hel" + lo)是变量加常量,并不会将其合并成一个字符串常量 System.out.println(hello == ("Hel" + lo)); // new 重新创建一个对象,和原先的字符串常量“Hello”没有关系 System.out.println(hello == new String("Hello")); // intern求得内部的字符串常量 System.out.println(hello == ("Hel" + lo).intern()); } } class Other{ static String hello = "Hello"; } -----------OUTPUT----------- true true true false false true
相关文章推荐
- 深度学习:Java 自动装箱和拆箱(好文)
- Java Socket(3): NIO
- Eclipse编译ImageJ
- JAVA Web定时执行任务
- Java基础:split 分割 字符串(分隔符如:* ^ : | , .) 及注意点
- 从Java官网下载JDK1.6等低版本JDK
- Java基础知识强化08:将字符串倒序输出(包括空格)的几种方法
- 基本的struts 1.x工程讲解
- 输入链表输出该链表倒数第k个结点java实现
- java之单例模式
- 如何在Mac OS系统下搭建Java开发环境图解
- JAVA里面的IO流(一)分类2(节点流和处理流及构造方法概要)
- javaweb前后台中文参数乱码
- 【软考之路】Java 安装配置
- Spring XML配置文件结构及bean的命名
- SDK、JDK、JRE、JVM、JDT、CDT等之间的区别与联系
- java文件读写操作大全
- spring在web容器启动时执行初始化方法
- java.security.InvalidKeyException: Illegal key size
- Java初学者都必须理解的六大问题