Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java中的引用

Java中的引用

作者头像
wust小吴
发布于 2019-07-08 08:43:05
发布于 2019-07-08 08:43:05
1.4K00
代码可运行
举报
文章被收录于专栏:风吹杨柳风吹杨柳
运行总次数:0
代码可运行
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.wust.java;

/**
 * 首先要理解 ,在Java中对象的访问是使用指针的形式来实现的
 * 该指针就是一个保存了对象的存储地址的变量,是对象在存储空间中的起始地址
 * 在Java中是使用对象的引用 来表示  指针这种数据类型
 * 在Java中 new 操作符的作用实际上是为对象开辟足够的内存空间
 * 换句话说,只要使用了new,就一定是生存了新的存储地址变量,也就是产生了一个指针,一定有引用指向了这个指针
 */
public class RefrenceTest {
	
	public static class People{
		private String name;
		private String id ;
		
		public People(){
			this("","");
		}
		public People(String name,String _id){
			this.name = name;
			this.id = _id;
		}
		public String getName() {
			return name;
		}
		public void setName(String name) {
			this.name = name;
		}
		public String getId() {
			return id;
		}
		public void setId(String id) {
			this.id = id;
		}		
		
	}
	
	public static void testA(){
		People p1 = new People("A","001");//p1此时指向的是,在内存中开辟了一个新的存储空间,大小为People类型
		People p2 = p1;//p2此时指向的就是p1指向的,Java没有为p2开辟新的存储空间
		p2.setName("B");//p2的值改变了,p1的值也就改变了
		System.out.println(p1.getName());//输出结果应该是B
		System.out.println(p1.hashCode());//hashCode()方法返回的就是对象存储的物理地址,实际有可能不是
		System.out.println(p2.hashCode());
	}
	
	public static void testB(){
		People p1 = new People("A","001");//p1此时指向的是,在内存中开辟了一个新的存储空间,大小为People类型
		People p2 = new People("A","001");//p2此时指向的是,在内存中开辟了一个新的存储空间,大小为People类型
		System.out.println(p1 == p2);
		System.out.println(p1.hashCode());//hashCode()方法返回的就是对象存储的物理地址,实际有可能不是
		System.out.println(p2.hashCode());
		System.out.println(p1.equals(p2));
	}

	public static void main(String[] args) {
		// 测试 Java指针引用
		testA();
		testB();
	}

}

输出结果:

B 705927765 705927765 false 366712642 1829164700 false

图解上面的两个测试:

testB:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2015年12月25日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【IT领域新生必看】Java编程中的神奇对比:深入理解`equals`与`==`的区别
在Java编程中,比较对象是一个常见的操作。equals和==是两种常用的比较方式,但它们的工作原理和应用场景有所不同。对于初学者来说,理解equals与==的区别,是编写正确和高效代码的关键一步。本篇文章将详细介绍equals与==的定义、用法及其区别,帮助你全面理解这些重要概念。
E绵绵
2024/07/08
3690
浅谈Java中的hashcode方法
  哈希表这个数据结构想必大多数人都不陌生,而且在很多地方都会利用到hash表来提高查找效率。在Java的Object类中有一个方法:
Java团长
2018/08/06
8440
【day20】集合深入探讨
按照斗地主的规则,完成洗牌发牌的动作。具体规则:使用54张牌打乱顺序,三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌。
程序员波特
2024/12/30
600
【day20】集合深入探讨
11.JAVA-Object类之finalize(),clone(),toString()等方法覆写
Object类是一个特殊的类,是所有类(包括数组,接口 )的父类,如果一个类没有用extends明确指出继承于某个类,那么它默认继承Object类,所以可以通过向上转型的方法使用类型为Object的变量指向任意类型的对象。
诺谦
2019/05/24
4900
WeakHashMap
WeakHashMap,此种Map的特点是,当除了自身有对key的引用外,此key没有其他引用那么此map会自动丢弃此值,
全栈程序员站长
2022/09/05
3740
15道大厂Java高频面试题(二)
序列化是指将对象的状态信息转换为可以存储或传输的形式的过程。在Java中,这意味着将对象的状态转换成字节流,以便可以将其持久化到磁盘或通过网络发送到其他JVM实例。要使Java对象可序列化,该对象的类需要实现java.io.Serializable接口。
程序员洲洲
2024/11/26
1910
Java方法引用详解
訾博ZiBo
2025/01/06
1240
java weakhashmap_解析WeakHashMap与HashMap的区别详解
WeakHashMap,此种Map的特点是,当除了自身有对key的引用外,此key没有其他引用那么此map会自动丢弃此值,
全栈程序员站长
2022/08/23
6670
java clone
实现Cloneable接口的类才可以被克隆,如果不实现该接口,调用Object clone方法会报CloneNotSupportedException:
LiosWong
2018/10/29
7030
大数据技术之_31_Java 面试题_02_== 和 equals 有什么区别 + String 相关 + 多态 + 传值 + static 加载机制 + 线程
程序员级别:码龙 > 码神 > 码农 > 码畜 学生级别:学神 > 学霸 > 学渣 > 学弱
黑泽君
2019/06/19
4940
大数据技术之_31_Java 面试题_02_== 和 equals 有什么区别 + String 相关 + 多态 + 传值 + static 加载机制 + 线程
为什么实现了equals()就必须实现hashCode()?
我们先来看下面这个简单的例子,然后运行她: class Person{ private String name; private int age; public Person(String name,int age) { this.name = name; this.age = age; } public void setAge(int age){ this.age = age; } @Override public boolean equals(Object
ImportSource
2018/04/03
7490
hash表存储方式_哈希表与数据的存储结构有关吗
HashSet集合的自身特点: * 1、底层数据结构:哈希表 * 2、存储,拿取都比较快 * 3、 线程不安全,运行速度快
全栈程序员站长
2022/11/15
8770
hash表存储方式_哈希表与数据的存储结构有关吗
Java集合类型大揭秘
这里HashMap里面用到链式数据结构的一个概念。上面我们提到过Entry类里面有一个next属性,作用是指向下一个Entry。打个比方,第一个键值对A进来,通过计算其key的hash得到的index=0,记做:Entry[0] = A。一会后又进来一个键值对B,通过计算其index也等于0,现在怎么办?
leon公众号精选
2022/04/27
3100
Java集合类型大揭秘
equals和hashcode
才学java的时候,打印某个对象是打印的一串莫名其妙的数字,后来知道这个是hashcode,就以为hashcode是对象的某个地址信息,直到看了一些文章才发现事实并非如此。
leobhao
2022/06/28
5810
JAVA15.JDK15.6 Record二次预览特性
2019,java语言架构师,Brian Goetz,“太啰嗦、繁文缛节”。创建纯粹的数据类,大量低价值、重复、易出错的代码:构造方法、getter/setter、equals、hashCode()、ToString()。
张哥编程
2024/12/19
540
设计模式学习笔记(六)原型模式以及深浅拷贝的区别
原型模式也是创建对象的一种方式,它一般用在这样的场景:系统中存在大量相同或相似对象的创建问题,如果用传统的构造函数来创建对象,会比较复杂而且耗费资源。这个时候使用原型模式的克隆方式,能够节省不少时间。比如Java 类中提供的Object clone()就是原型模式的应用。
归思君
2023/10/16
2920
设计模式学习笔记(六)原型模式以及深浅拷贝的区别
Java基础(九):Object 类的使用
使用native关键字说明这个方法是原生函数,也就是这个方法是用C/C++等非Java语言实现的,并且被编译成了DLL,由Java去调用
冬天vs不冷
2025/01/21
1530
Java基础(九):Object 类的使用
java 通过Object的clone复制对象
对象的克隆是指创建一个新的对象,且新的对象的状态与原始对象的状态相同。当对克隆的新对象进行修改时,不会影响原始对象的状态。 常规实现
六月的雨在Tencent
2024/03/28
1350
java 通过Object的clone复制对象
9. 说说hashCode() 和 equals() 之间的关系?
hashCode() 的作用是获取哈希码,也称为散列码;它实际上是返回一个int整数。这个哈希码的作用是确定该对象在哈希表中的索引位置。
用户11332765
2024/10/28
960
9. 说说hashCode() 和 equals() 之间的关系?
java中clone的用法_java clone是浅拷贝吗
Cloneable和Serializable一样都是标记型接口,它们内部都没有方法和属性,implements Cloneable表示该对象能被克隆,能使用Object.clone()方法。如果没有implements Cloneable的类调用Object.clone()方法就会抛出CloneNotSupportedException。
全栈程序员站长
2022/11/04
7690
相关推荐
【IT领域新生必看】Java编程中的神奇对比:深入理解`equals`与`==`的区别
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验