① 谁知道java中参数是引用传递还是值传递
java中方法参数传递方式是按值传递。所谓值传递,就是将实际参数值的副本(复制品)传入方法内,而自己本身不会受到任何影响。
如果参数是基本类型,传递的是基本类型的字面量值的拷贝。
② java中对象类型的参数传递
因为Java里方法参数的传递实际上只有值传递(不管基本类型或引用类型),对基本类型来说是把其值传递了一份过去,而对引用类型来说实际是把引用地址的值复制一份传递了过去。
另外,只有用new方法创建的对象的实际成员数据是存放在堆里面的,而其他方法内部定义的变量都存放在栈中,一旦出了方法的范围就失效,会被内存回收。
知道了以上两点,就可以分析了,swap方法里t1,t2,temp都是存放在栈里的只保存引用类型地址的变量,不管他们怎么交换,实际上不会改变堆里面的内容,而main方法里的time1, time2的引用类型虽然其地址仍在栈中,而实际数据在堆中,程序中没有任何改变其内容的语句,因此,不会产生交换。
③ 如何理解java将对象作为参数
对象和基本数据类型一样也是一种数据类型啊,他叫引用数据类型,你就理解成诸多基本数据类型和方法的集合体就可以了,基本数据类型可以作为参数,对象也是可以的啊,举个栗子
类定义:
class User{
private String username;
public User(String username){
this.username=username;
}
public User(){}
public String getUsername(){
return this.username;
}
public void setUsername(String username){
this.username=username;
}
}
方法定义:
public void aa(User user){
System.out.println(user.getUsername());
}
方法调用
aa(new User("张三"));
结果打印出张三
④ java对象在参数传递中是什么传递
传递的是对象的引用(即传递的是对象的地址)。
⑤ java 对象传参
新闻附件、公告附件、通知附件三个类继承同一个抽象类或实现同一个接口,
比如三个类都继承Attachment类;
新闻、公告、通知三个基类继承同一个抽象类或实现同一个接口,
比如三个类都实现Informable接口,在这个接口中定义一个抽象方法
public void inform(Attachment att);//就是你说的公共方法
然后在新闻、公告、通知三个基类中各自实现该方法,具体地限制参数是相应附件。
-------------------------------------------------------
不向上继承,你怎么实现 新闻调用该方法……、公告调用该方法……、通知调用该方法…… 啊?
不是限定了就是一个公共方法吗?还要被三个不同类调用
⑥ java 需要传递类对象为参数的时候,几种方法
下面给你举例3种方法:
1、直接抽象类
对象 = new 抽象类()
{
//重写此抽象类的抽象方法
};
2、抽象类
对象 = new 子类();
接口/实现类 对象= new 实现类()
class 子类 extends 抽象类{
//实现此抽象类的抽象方法即可。
}
class 实现类 implements 接口{
//实现此接口的抽象方法即可
}
3、直接把对象创建出来,比如在参数中需要用到某个类对象的时候,除了上述方法以外,也可以直接把此对象创建出来。
public void method(class obiect,,);
()中就可以这么写
(new (抽象类/接口(){
//在这实现抽象方法
}))
⑦ 请问:JAVA中对象作为参数,是按值传递,还是按地址传递
对象做参数,传过去的是地址。
所以你在你调用的方法里面可以修改对象的某些属性(值),基本数据类型就不可以。Java中数组也是传递地址的。
因此我们如果在某些地方调用其他方法时,需要用传进去的参数把结果带回来,就可以用对象或者数组做参数,但用基本数据类型,就不能把结果带回来
⑧ java 把对象作为参数传递
不是。是这个area方法只可以接收circle或者circle子类的对象,其他对象一律不能作为形参传递给该area方法
⑨ java中参数传递方式
当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 是值传递。Java 编程语言只由值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。
⑩ Java参数传递是值传递还是引用传递
以下是csdn中查到的一些资料,希望有所帮助
java 传递参数的两种方式:
Java中没有指针,所以也没有引用传递了,仅仅有值传递不过可以通过对象的方式来实现引用传递 类似java没有多继承 但可以用多次implements 接口实现多继承的功能
值传递:方法调用时,实际参数把它的值传递给对应的形式参数,方法执行中形式参数值的改变不影响实际参 数的值。
引用传递:也称为传地址。方法调用时,实际参数的引用(地址,而不是参数的值)被传递给方法中相对应的形式参数,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,方法执行中形式参数值的改变将会影响实际参数的值。
a.传递值的数据类型:八种基本数据类型和String(这样理解可以,但是事实上String也是传递的地址,只是string对象和其他对象是不同的,string对象是不能被改变的,内容改变就会产生新对象。那么StringBuffer就可以了,但只是改变其内容。不能改变外部变量所指向的内存地址)。
b.传递地址值的数据类型:除String以外的所有复合数据类型,包括数组、类和接口
值传递的例子:
[java]view plain
packagecom.other.test;
publicclassTest{
publicstaticvoidchange(inti,intj){
inttemp=i;
i=j;
j=temp;
}
publicstaticvoidmain(String[]args){
inta=3;
intb=4;
change(a,b);
System.out.println("a="+a);
System.out.println("b="+b);
}
}
输出的结果是 a=3 b=4,传递的值并不会改变原值
引用传递的例子:(数组)
[java]view plain
packagecom.other.test;
publicclassTest{
publicstaticvoidchange(int[]counts){
counts[0]=6;
System.out.println(counts[0]);
}
publicstaticvoidmain(String[]args){
int[]count={1,2,3,4,5};
change(count);
System.out.println(count[0]);
}
}
输出结果是6 6 也就是引用的值改变了原来的值
引用传递的例子:(对象)
定义一个A对象:
[java]view plain
packagecom.other.test;
publicclassA{
inti=0;
}
[java]view plain
packagecom.other.test;
publicclassTest{
publicstaticvoidadd(Aa){
//a=newA();①
a.i++;
}
publicstaticvoidmain(Stringargs[]){
Aa=newA();
add(a);
System.out.println(a.i);
}
}
看看String的情况:
[java]view plain
packagecom.other.test;
publicclassTest{
Stringstr=newString("old");
char[]ch={'a','b','c'};
publicstaticvoidmain(Stringargs[]){
Testex=newTest();
ex.change(ex.str,ex.ch);
System.out.print(ex.str+"and");
System.out.println(ex.ch);
}
publicvoidchange(Stringstr,charch[]){
str="new";
ch[0]='d';
}
}
( 对象包括对象引用即地址和对象的内容)
String 比较特别,看过String 代码的都知道, String 是 final的。所以值是不变的。 函数中String对象引用的副本指向了另外一个新String对象,而数组对象引用的副本没有改变,而是改变对象中数据的内容.
对于对象类型,也就是Object的子类,如果你在方法中修改了它的成员的值,那个修改是生效的,方法调用结束后,它的成员是新的值,但是如果你把它指向一个其它的对象,方法调用结束后,原来对它的引用并没用指向新的对象。
Java参数,不管是原始类型还是引用类型,传递的都是副本(有另外一种说法是传值,但是说传副本更好理解吧,传值通常是相对传址而言)。
如果参数类型是原始类型,那么传过来的就是这个参数的一个副本,也就是这个原始参数的值,这个跟之前所谈的传值是一样的。如果在函数中改变了副本的值不会改变原始的值.
如果参数类型是引用类型,那么传过来的就是这个引用参数的副本,这个副本存放的是参数的地址。如果在函数中没有改变这个副本的地址,而是改变了地址中的值,那么在函数内的改变会影响到传入的参数。如果在函数中改变了副本的地址,如new一个,那么副本就指向了一个新的地址,此时传入的参数还是指向原来的地址,所以不会改变参数的值。