`
cheng.xinwei
  • 浏览: 79362 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

【java】论integer是地址传递还是值传递

阅读更多
论integer是地址传递还是值传递

Integer 作为传参的时候是地址传递可以参考如下例子,在程序刚启动的时候把 Integer 的index 对象锁住 ,并且调用了 wait方法,释放了锁的资源,等待notify,最后过了5秒钟,等待testObject 调用notify 方法就继续执行了。大家都知道锁的对象和释放的对象必须是同一个,否则会抛出  java.lang.IllegalMonitorStateException 。由此可以证明 Integer作为参数传递的时候是地址传递,而非值传递。


public class IntegerSyn {
	
	public static void main(String[] args) throws InterruptedException {
		Integer index = 0;
		TestObject a = new TestObject(index);
		synchronized (index) {
			new Thread(a).start();
			index.wait();
		}
		System.out.println("end");
	}
}

class TestObject implements Runnable {
	private Integer index;
	
	public TestObject(Integer index){
		this.index = index;
	}
	
	public void run() {
		try {
			TimeUnit.SECONDS.sleep(5);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		synchronized (index) {
			index.notify();
		}
	}
}




那就会有人问了,为什么执行如下代码的时候两次的输出结果是一样的?
public static void main(String[] args) throws InterruptedException {
		Integer index = 0;
		System.out.println(index);
		test(index);
		System.out.println(index);
	}
	
	public static void  test(Integer index){
		index++;
	}


理由很简单,可以看到 Integer 类中final的value字段,说明一旦integer类创建之后他的值就不能被修改,在 index++ 的时候Integer是创建一个新的类,所以这个第二次输出的时候结果是一样的!
 private final int value;



1
0
分享到:
评论

相关推荐

    java参数传递时到底是值传递还是引用传递[归类].pdf

    无论将Java的参数传递称为"值传递"还是"引用传递",重要的是要明白对象的引用不会改变,但对象的内容可以在方法中被修改。这种机制使得Java的代码更安全,避免了不必要的副作用,同时也提供了灵活的编程模型。

    java 之方法调用 方法传参 值传递还是引用传递字节码

    在Java编程语言中,方法调用和参数...参数传递遵循值传递原则,对于基本类型传递值副本,对于对象类型传递对象引用的副本。通过字节码和开发工具,我们可以更深入地理解这些过程,提升我们的编程技能和问题排查能力。

    Java参数传递及值传递实现原理详解

    Java参数传递及值传递实现原理详解 Java语言中,参数传递是方法调用过程中的一种机制,讲述了Java参数传递及值传递实现原理详解。参数传递有两种方式:按值传递和按引用传递。 1. 按值传递(Call by Value) 按值...

    JAVA-int和Integer的区别

    在Java编程语言中,`int`和`Integer`都是用于表示整数值的数据类型,但它们之间存在着显著的差异。理解这些区别对于编写高效且优化的Java代码至关重要。 首先,`int`是Java中的原始数据类型(Primitive Type),它...

    Java中的按值传递和按引用传递的代码详解

    在Java中,String和Integer等内置对象也是按值传递的。例如,在上面的实验中,我们使用String类型的变量str,并将其传递给changeStr方法。在changeStr方法中,我们将str的值改为"改变的",但是输出结果仍然是str = ...

    浅析java中Integer传参方式的问题

    在Java中,当我们把一个Integer对象作为参数传递给方法时,实际上是传递了对象的引用(地址值)。但是,这个引用本身是不可变的,也就是说,我们不能通过在方法内部改变这个引用来影响到方法外部的对象。例如,如果...

    Java引用变量传递诡异之处

    2. **方法参数传递机制**:在Java中,无论是基本类型还是引用类型,方法参数都是按值传递的。也就是说,当你将一个引用类型的变量作为参数传递给方法时,实际上是传递了该变量的值(即引用),而不是变量本身。在...

    Java方法参数传递机制原理解析

    因此,在Java中,参数传递机制是值传递还是引用传递取决于参数的类型。如果参数是基本数据类型,那么参数传递是值传递;如果参数是引用数据类型,那么参数传递是引用传递。 需要注意的是,在Java中,参数传递机制...

    浅析Java引用类型和方法参数传递

    - 当传递值类型时,方法内部对参数的任何修改都不会影响原始变量。 - 当传递引用类型时,尽管仍然遵循按值传递的原则,但由于传递的是引用的值,因此对引用所指向的对象所做的任何修改都会影响原始对象。 - 在处理不...

    Java零基础-参数传递-2.md

    作为一门广泛使用的编程语言,Java提供了多种参数传递的方式,这其中包括了基本类型的值传递以及引用类型的地址传递。同时,文章还涵盖了可变参数列表(varargs)的使用方法以及如何在方法中正确地定义和使用返回值...

    java 中函数的参数传递详细介绍

    1. 值传递:在Java中,基本数据类型(如int、float、char等)和它们的包装类(Integer、Float、Character等)作为函数参数时,遵循值传递的原则。这意味着函数内部对这些参数的任何修改都不会影响到原始变量。例如,...

    浅谈Java中真的只有值传递么

    在Java中,对于基本数据类型(如int、double、char等)以及它们的包装类(Integer、Double等)以及String,参数传递是按值进行的。例如,在值传递的例子1中,当我们将一个int类型的变量num传递给change()方法时,...

    学习文档_JAVA中Integer和Byte转换.doc

    在Java编程语言中,Integer和Byte之间的转换是常见的操作,特别是在处理二进制数据或网络通信时。本文档主要探讨了如何在Java中实现这两种数据类型的转换,包括有符号和无符号的转换。 首先,Integer在Java中占用4...

    Integer缓存池案例1

    在Java中,基本类型的传参是按值传递,对象的传参看似是引用传递,实际上是按共享对象的引用传递值。在上述例子中,虽然a和b看起来是Integer对象,但实际上它们是Integer对象的引用。在swap方法内部,即使改变了局部...

    Java多线程初学者指南(7):向线程传递数据的三种方法.docx )

    Java 多线程初学者指南之向线程传递数据的三种方法 在多线程编程中,向线程传递数据是一项非常重要的任务。与传统的同步开发模式不同,在多线程异步开发模式下,数据的传递和返回方式有很大的区别。因此,本文将...

    Java中int和Integer的区别.doc

    综上所述,`int`和`Integer`虽然都可以用来表示整数值,但在Java中它们有着本质的不同。`int`是基本数据类型,直接存储值;而`Integer`是`int`的包装类,存储的是指向该值的引用。在实际编程过程中,选择使用哪种...

    java中如果需要返回多个值怎么办

    Java中最直观的方法是通过数组或集合来传递多个值。例如,如果你知道需要返回的值数量是固定的,可以使用数组;如果不确定,可以选择集合如ArrayList或LinkedList。这样,方法可以创建一个数组或集合,将结果存储...

    java参数传递

    根据题目要求,我们将详细解析如何使用Java Applet来接收HTML文件中的参数,并计算矩形的面积与周长,最后将结果展示在...但理解Java Applet的基本原理仍然有助于我们更好地理解和学习软件工程中的参数传递等概念。

    Java常考面试题

    引用传递传递的是对象的引用,对引用对象的修改会影响到原始对象。在Java中,通常认为参数传递都是值传递,但对对象的引用参数进行操作实际上类似于引用传递。 进程和线程是操作系统中的两个重要概念。进程是系统中...

Global site tag (gtag.js) - Google Analytics