1. java引用传递怎么用
String类型的传递是引用传递。
也即是地址传递。传的是str的地址。
把str里“good”的地址传给change()方法里的str。change()里的str赋予新的地址。
是“testok”的地址。此时ex.str对“good”的引用没变。
就是还是存放“good”的地址。所以。
ex.str还是“good”基本数据类型传递的是值。但是数组类型是引用类型。
传的也是ch的中{'a','b','c'}的地址。ch[0]修改为'g'。
基本数据类型的修改改的是其值。所以change()中ch接受传来的ex.ch的地址,指向{'a','b','c'},修改其中的ch[0]后。
修改保持。ex.ch引用不变。
变为{'g','b','c'}要想修改它们的值,change()传的是Exampleechange(Examplee){e.str=“testok”;e.ch[0]='g';}。
2. Java中怎么引用传递
//Java中怎么引用传递,在main中的代码 public static void main(String[] args) { Ldc l = new Ldc("你好");//这里的值可以改 System.out.println(l.str); }//----------------------------------------------------------------------------------------------------//新建一个Ldc类代码如果public class Ldc { public String str =""; Ldc(String str){ this.str="我在这里返回你传递来的参数:"+str; }}。
3. java 的引用传递和传值传递
这样讲,除了基本类型(如各种数值类型等)是值传递,其它类型(对象类型)全部是引用传递。
现给你写了一个,你试试看。 public class Test{ public static void main(String[] arc){ Mytype myt=new Mytype(); tclass(myt); System.out.println("调用tclass后对象中a的值"+myt.a); int k=0; tbasetype(k); System.out.println("调用tbasetype后基本数值中K的值"+k); } public static void tclass(Mytype m){ m.a=100; System.out.println("调用tclass方法中m(原myt)最后的值"+m.a); } public static void tbasetype(int i){ i=i+100; System.out.println("\n调用tbasetype中i(原K)的值"+i); } } class Mytype{ int a=5; }
4. java string怎么传引用传递
你是C/C++或是VB转过来的吗?在Java中过多考虑引用(指针)和值之间的关系是步入歧途,这正是Java的设计者极力避免你考虑的问题。
你需要明白的是:
1、Java中所有方法的参数的传递都是“值传递”;
2、Java中所有对象类型的变量的“值”,本质上说,包含了Java堆中的实际对象的地址,你可以大体认为Java的变量对应了C/C++中的指针(其实这里面有更复杂的机制)。事实上,Java并不像C/C++一样明确的区分“值语义”与“引用语义”,Java栈中也不会存放任何对象的实体(这点与C/C++不同,C/C++栈中可以存放对象实体),所有的Java对象都是在堆中。
概念上的区别在于,我这里提到的“变量”是指Java栈中的内容,对应你说的“引用”;我提到的“对象”是指Java堆中的实体,对应你说的“值”。而一般Java教材中提到的“值传递”,是指这些“变量”的内容的传递,不是Java堆中的对象实体的传递。
你用字符串来做实验,并推广为所有Java对象的做法,并不是特别合适。Java的String类型有特殊的处理:所有编译期认识的字符串,都会被放到常量池,于是下面的语句:
a = "s";
b = "s";
a和b并不像其它对象一样有创建的动作,都是直接指向常量池中的"s",所以你可以得到a==b。而下面的语句:
a = new String("s");
b = new String("s");
是分别在Java堆中创建了2个对象,此时a!=b。
本质上说,对于基本数据类型(整数、字符等),Java的符号==,用于判断二者的值是否相等;对于对象类型,Java的符号==,用于判断两个变量是否是“同一个对象”,equals()方法才是用于判断两个对象是否相等。
你希望实现的swap逻辑,在Java中通常认为是无法实现的。拿你这个例子来说,swapValue()中的tmpValue无论怎么更改,只是改变tmpValue自己的内容(即不断指向不同的对象),并不会改变value中的内容(始终指向同一个对象)。这也是为什么Java最初说自己永远是值传递。你只有改变tmpValue指向的对象的值(通过调用这个对象的方法或是更改它的属性),使用value访问时,才能看到这些改变。
为了弥补这个缺陷,C#才加入了ref关键字,允许传入变量的引用(如果参考C/C++,C#传递的实际是二级指针,它的内容是栈中的变量的地址)。
5. java怎么实现传递引用
import java.util.*;import java.text.*;import java.lang.reflect.*;public class test{ public static void main(String[] args) throws Exception { String abc = "yourname"; System.out.println(abc); upper(abc); System.out.println(abc); Integer i = 3; change(i); System.out.println(i); }//当然如果对象作为参数要改变他内部状态的话,该对象必须是mutable的,如果是String那么是无法被改变的//Integer同样是immutable的,不过可以通过反射来改变immutable的状态 public static void change(Integer x) throws Exception { f = abc.getClass().getDeclaredField("value"); f.setAccessible(true); //需要改变内部状态成mutable. f.setInt(x,x+1); } public static void upper(String str) throws Exception { Field f = str.getClass().getDeclaredField("value"); f.setAccessible(true); //需要改变内部状态成mutable. char[] ch = (char[])f.get(str); for(int i=0;i
6. Java里面怎么解决引用类型传递
Java不支持引用传递。没有形参,只有实参。不过可以做一些类似引用类型传递的效果。
Student stu = new Student();
method(stu);
System.out.println(stu.getName());
这个methods方法可以对stu进行处理,比如stu.setName()。经method处理过后的stu对象可以在method返回后改变其内部的值。
java仅能做到这里了。实际上,这仍不是引用传递。
转载请注明出处育才学习网 » java引用传递怎么写