面向对象 引用传递

引用传递在java中有重要作用这里 讲解三个范例:

范例一:

class Demo{
	int temp=30;//此处为了方便,不封装
};
public class Test{
	public static void main(String args[]){
	Demo d1=new Demo();//实例化Demo对象,实例化之后temp=30
	d1.temp= 50 ;//修改temp属性的内容
	System.out.println("fun()方法调用之前:"+d1.temp);
	fun(d1);
	System.out.println("fun()方法调用之后:"+d1.temp);
	}
	public static void fun(Demo d2){//此处的方法由主方法直接调用
	d2.temp = 1000;//修改temp值
	}
}

内存分析图:

范例二:

public class Test{
	public static void main(String args[]){
	String str1= "hello" ;
	System.out.println("fun()方法调用之前: "+str1);
	fun(str1);
	System.out.println("fun()方法调用之后: "+str1);
	}
	public static void fun(String str2){//此处的方法由主方法直接调用
	str2="world";//修改字符串内容
	}
}

内存分析图:

范例三:

class Demo{
	String temp= "hello" ;
};
public class Test{
	public static void main(String args[]){
	Demo d1=new Demo();//实例化Demo对象,实例化后temp="hello"
	d1.temp="world";//修改temp属性内容
    System.out.println("fun()方法调用之前: "+d1.temp);
	fun(d1);
	System.out.println("fun()方法调用之后: "+d1.temp);
	}
	public static void fun(Demo d2){//此处方法由主方法直接调用
		d2.temp="!!!";//修改temp值
	}
}

内存分析图:

范例一与范例三的流程是完全一样的,第二个范例比较特殊,因为String类是一个特殊的类,其内容是不可改变的。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-18 12:23:49

面向对象 引用传递的相关文章

Java面向对象-方法的值传递和引用传递

Java面向对象-方法的值传递和引用传递 方法的值传递: 值传递 在方法里改变变量的值 作用范围仅仅是方法里 对外面不影响: 上代码: 1 package com.java1234.chap03.sec03; 2 3 public class Person { 4 5 void speak(int age){ 6 System.out.println("我今年"+age+"岁了"); 7 age=24; // 作用范围是方法里 8 } 9 10 public sta

对象的引用传递 ——面向对象3

引用传递 class Ref1{ int temp=10; } public class RefDemo01{ public static void main(String args[]){ Ref1 r1=new Ref1();//实例化对象 r1.temp=20; System.out.println(r1.temp); tell(r1); System.out.println(r1.temp); } public static void tell(Ref1 r2){ r2.temp=30;

Java面向对象_对象内存分析—值传递和引用传递

对象内存分析,我一直学的比较模糊,今天抽空整理一下,希望能理清. 先说一下,内存分析从何而来,这对于我们这些刚接触java的人来说都比较模糊,就从new关键字说起吧. new关键字表示创建一个对象或者说是实例化对象或者说是申请内存空间,所有程序运行都需要内存来存储数据,这样内存的概念就出来了.举个例子说明:定义一个类Person,属性:char a;int sge;那么创建一个对象申请的内存空间就是所有属性所占字节之和,为6个字节. 详细理一下对象在内存中的结构: Person p=new Pe

C#面向对象19 值传递和引用传递

值类型:int double char decimal bool enum struct引用类型:string 数组 自定义类 集合 object 接口 **值传递和引用传递1.值类型在复制的时候,传递的是这个值的本身2.引用类型在复制的时候,传递的是这个对象的引用 原文地址:https://www.cnblogs.com/youguess/p/8663034.html

引用传递与值传递

一.ECMAScript中的数据类型 1.基本数据类型:null.undefined.number.boolean.string 2.引用数据类型:object(obj.[].{}.function.RegExp等),是由一组无序的名值对组成的 3.typeof与instanceof作用: typeof是用来检测这些基本数据类型的: 返回"underfined",表示这个值只是被声明了,却没有给其定义,也可以理解为没有赋值 返回"boolean"表示这个值是布尔值,

Android For JNI(三)——C的指针,指针变量,指针常见错误,值传递,引用传递,返回多个值

Android For JNI(三)--C的指针,指针变量,指针常见错误,值传递,引用传递,返回多个值 C中比较难的这一块,大概就是指针了,所以大家还是多翻阅一下资料,当然,如果只是想了解一下,看本篇也就够了,不过我也尽量陈述的很详细 一.指针 要说指针,其实通俗易懂的话来说,他应该是保存内存地址的一个变量,我们来看一下小例子 #include <stdio.h> #include <stdlib.h> main(){ //int 变量 int i ; i = 5; //打印i的值

引用传递

引用传递的本质就在于别名,而这个别名只不过是放在了栈内存之中,既:一块堆内存可以被对个栈内存所指向 举例: Person per1 = new Person(); per1.name = "小于子"; per1.age = 30; Person2 oper2 = per1; oper2.name = "狗剩"; 在程序开发中,所谓的垃圾空间指的是没有任何栈内存指向的堆内存空间,所有的垃圾空间将不定期被java的垃圾收集器(GC.Garbage Collector)进

值传递 引用传递

方法参数传递有2种方式: 值传递和引用传递. 值传递: 默认都是值传递.值传递有2种,值类型和引用类型的.实质是复制栈中的值. 值类型的值传递:栈中的值就是实际值. 引用类型的值传递:栈中的值是内存堆中地址. 引用传递: 参数前加ref的为引用传递,引用传递有2种,值类型和引用类型的.实质就是传递自己本身,只是多了个别名.

java 引用传递和值传递

1.为什么要分值传递和引用传递: 基本类型存在在栈中,复合类型(对象)存在堆中.操作栈的速度要快于堆,且对象的复制相比基本类型不仅浪费内存而且速度比较慢. 从这里就可以看出来:对象是按照引用传递(数据库事务封装Connection对象传递的时候最能体现这点):基本类型是按照值传递. 2.那为什么String类型传递后会表现的值传递的特性:这并不是由于值传递而导致的,而是由于String类的不可变性(只读特性)导致的.String类型按照引用传递,但是一旦改变了,就变成新的对象了,原来引用指向的对