String类型传值以及对象传值

package Virtual;
class Stan{
	String mm = "hello";
}
class Virtual {
	public static void main(String[] args)
	{
		Stan s=new Stan();
		System.out.println(s.mm);
        change(s);
		System.out.println(s.mm);
	}
	public static void change(Stan s)
	{
		s.mm="say";//其实是改变了mm指向字符串的地址,从指向hello的地址改成指向say的地址,hello还是存在,只是没有指向它
	}
}

mm刚开始指向的是hello那一片内存,当传入change函数里,对象是原对象的引用,可以直接指向原对象mm的地址,此时如果将s.mm改成say,由于String类型是不可改变的,只能为say重新分配一片内存空间,并且将mm的值指向say的内存,所以输出会改变,

其实是改变了String对象 mm指向字符串的地址,从指向hello的地址改成指向say的地址,hello还是存在,只是没有指向它

再看下一个例子

package Virtual;
class Stan{
	String mm = "hello";
}
class Virtual {
	public static void main(String[] args)
	{
		String s="123";
		System.out.println(s);
        change(s);
		System.out.println(s);
	}
	public static void change(String s)
	{
		s="say";
	}
}

此时s并没有被更改,这是为什么呢?因为传入函数时,是复制了一个String对象副本,这个String对象指向了say的内存空间,但是原String对象指向的还是123的内存空间,所以s并没有发生更改。String类型可以被认为是传值,即另外创建一个String对象,与原对象无关

package Virtual;
class Stan{
	int temp=10;
}
class Virtual {
	public static void main(String[] args)
	{
		Stan s=new Stan();
		System.out.println(s.temp);
        change(s);
		System.out.println(s);
	}
	public static void change(Stan s)
	{
		s.temp=30;
	}
}

这个跟例子1是一样的,也是传递对象的引用,即地址,并且temp是int型,可以被更改,所以直接改变temp所在的堆区的值为30

未完待续

时间: 2024-10-09 23:37:00

String类型传值以及对象传值的相关文章

IDEA技巧-快速编写一个String类型的JSON对象

1.先编写一个String类型空值对象 String strJson = ""; 2.将光标放在""中间 3.Alt+Enter调出Inject language or reference视图界面,回车选中Inject language or reference,再选择JSON组件,回车后光标还在字符串中间 4.光标在""中间,再次Alt+Enter,选中Edit JSON Fragment并回车,然后编写JSON对象,JSON对象会自动格式化进

struts复合类型传值(对象传值)

01:导包,配置web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="

.NET向WebService传值为decimal、double、int、DateTime等非string类型属性时,服务器端接收不到数据的问题

最近在做CRM项目时,使用C#调用SAP PI发布的WebService服务时遇到的问题: 向WebService传值为decimal.double.int.DateTime等非string类型数据时,服务器端接收不到数据.查询了很多资料,终于解决了问题,总结如下. 问题现象: 用C#.NET调用PI开发的WebService时,在客户端将封装的带有decimal属性的对象传到服务器端时,服务器端可以得到string类型的属性值,却不能得到int.double.decimal类型和DateTim

20150109--面向对象+对象传值-00

魔术方法 魔术方法也是一种方法,是一种在类内部定义的方法.魔术方法会在某个特定的情况下自动的被对象调用. 构造方法 构造方法就是对象在实例化之后会自动调用的方法. 语法:__construct() 构造方法的意义:给对象的属性进行初始化 兼容性构造方法 在低版本中没有构造方法__construct(),与其他语言一样,构造方法的名字与类名一致 兼容构造方法处理方式 析构方法 析构方法:对象被销毁的时候(销毁前),会自动调用的方法 语法:__destruct() 析构方法的意义:往往是为了释放内存

IOS各种传值之一(对象传值)

1:在不同的controllerview之间通过对象进行传值 //传值方向 从A到B //A控制器 界面: // //  ViewController.h //  Index // #import <UIKit/UIKit.h> #import "Person.h" @interface ViewController : UIViewController @property (weak, nonatomic) IBOutlet UITextField *name; @pro

java对象转换String类型的三种方法

在很多情况下我们都需要将一个对象转换为String类型.一般来说有三种方法可以实现:Object.toString().(String)Object.String.valueOf(Object).下面对这三种方法一一分析 一.采用Object.toString()toString方法是java.lang.Object对象的一个public方法.在java中任何对象都会继承Object对象,所以一般来说任何对象都可以调用toString这个方法.这是采用该种方法时,常派生类会覆盖Object里的t

9、Cocos2dx 3.0游戏开发找小三之工厂方法模式与对象传值

重开发者的劳动成果,转载的时候请务必注明出处:http://blog.csdn.net/haomengzhu/article/details/27704153 工厂方法模式 工厂方法是程序设计中一个经典的设计模式,指的是基类中只定义创建对象的接口,将实际的实现推迟到子类中. 在这里,我们将它稍加推广,泛指一切生成并返回一个对象的静态函数. 一个经典的工厂方法如同这样: Sprite* factoryMethod() { Sprite* ret = new Sprite(); //在这里对 ret

C++中string类型对象和double型变量之间的互相转换

//convert string type value to double type value string s = "23"; double d; istringstream is(s); is>>d; cout<<d<<endl;   //输出23 //convert double type value to string type value double d=45; string s; ostringstream os; os<<

java5核心基础之泛型(3)-泛型作用于编译阶段-怎样将String对象传入Integer类型的泛型对象中?

泛型作用于编译阶段: 泛型是作用于编译阶段,在编译阶段控制类型,以确保在编写代码的时候仅仅能传入指定类型数据到泛型集合对象中去. 怎样验证呢,贴代码例如以下: package highBasic.generic; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; public class StringAddToGeneri