没有指针的Java语言
来源:互联网 发布:mac air怎么切换输入法 编辑:程序博客网 时间:2024/06/06 11:16
引用与指针
- 引用(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----------- truetruetruefalsefalsetrue
0 0
- 没有指针的Java语言
- java的引用明明和指针没什么本质区别,java为什么还宣称没有指针并把这个当作语言的优点?
- 没有对象的指针是野指针【用C语言做生日贺卡】
- java中有没有指针
- 最近对C语言的兴趣没有以前那么强烈了 数组 指针,怎么搞!!!!!!!!
- Java语言绘画—没有尾巴的小乌龟
- C语言数组与指针的问题注意,学了那么久的C语言居然都没有发现!
- c语言指针,指向指针的指针
- c没有main函数/java没有main方法--语言运行的实质之实例
- java中到底有没有指针
- java中到底有没有指针
- Java没有指针怎么实现链表?
- java中到底有没有指针?
- java的引用和C语言指针的探讨
- java的引用和C语言指针的探讨
- C语言的指针
- C语言的指针
- C语言的指针
- 如何实现自己的输入流
- Spiral Matrix(**)
- 机房收费系统之组合查询——窗体的继承
- win7 下 VisualSVN Server post-commit 钩子问题
- atitit.提升兼容性最佳实践 p825.doc
- 没有指针的Java语言
- 惠普初体验
- PAT Basic level practice 21
- C#——获取本机IP
- hdu1003(简单dp)
- Atitit.播放系统的选片服务器,包厢记时系统 的说明,教程,维护,故障排查手册p825
- Android 去掉窗口标题和程序全屏
- 使用线程的几种方式(1) 流水线
- PAT Basic level practice 21