传递还是值传递

在java中String,对象,Integer(包装类型的)关于引用传递还是值传递

场景:

     大家都知道基本的数据类型,int,float等等这种是按值传递的。但是对于String,对象,Integer是怎样传递呢?

原理知识:

     如果参数类型是原始类型,那么传过来的就是这个参数的一个副本,也就是这个原始参数的值,这个跟之前所谈的传值是一样的。如果在函数中改变了副本的 值不会改变原始的值.

     如果参数类型是引用类型,那么传过来的就是这个引用参数的副本,这个副本存放的是参数的地址。如果在函数中没有改变这个副本的地址,而是改变了地址中的 值,那么在函数内的改变会影响到传入的参数。

     如果在函数中改变了副本的地址,如new一个,那么副本就指向了一个新的地址,此时传入的参数还是指向原来的 地址,所以不会改变参数的值。

测试用例

   

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class Person {
     private int id;
     private String name;
 
     public int getId() {
         return id;
     }
 
     public void setId( int id) {
         this .id = id;
     }
 
     public String getName() {
         return name;
     }
 
     public void setName(String name) {
         this .name = name;
     }
 
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
public class TestBasicType {
     
     public static void methonInt( int p) {
         p = 10 ;
     }
     public static void methonInteger(Integer p) {
         p = 10 ;
     }
     public static void methonString(String p) {
         p = "word" ;
     }
     public static void methonStringObject(String p) {
         p = "world" ;
     }
     
     public static void methodObj(Person p) {
         p.setId( 34534 );
     }
     public static void main(String[] args) {
         int a = 3 ;
         Integer b = 4 ;
         String s = "hello" ;
         String sobj = new String( "hello" );
         Person p = new Person();
         p.setId( 12312 );
         TestBasicType.methodObj(p);
         TestBasicType.methonInt(a);
         TestBasicType.methonInteger(a);
         TestBasicType.methonString(s);
         System.out.println( "--int-------->" + a);
         System.out.println( "--Integer-------->" + b);
         System.out.println( "--String-------->" + s);
         System.out.println( "--StringObject-------->" + sobj);
         System.out.println( "--Object-------->" + p.getId());
         
     }
}
输出结果为:
      -- int --------> 3
      --Integer--------> 4
      --String-------->hello
      --StringObject-------->hello
      --Object--------> 34534

测试说明:

           String,基本类型(int等等),包装类型(Integer等等)都是值传递

           实际的对象为引用传递。

疑问:


       在这里可能会有网友问了,包装类型,String难道不是对象么?说实话这里我也有疑惑,但是不管怎么样还是以测试结果为准。
##########################################################################################################33

java基本类型和包装类的区别

  (2012-07-21 15:38:26)
标签: 

杂谈

 
int 是基本类型,直接存数值 
Integer是类,产生对象时用一个引用指向这个对象
Java把内存划分成两种:一种是栈内存,另一种是堆内存  
在函数中定义的一些基本类型的变量和对象的引用变量都是在函数的栈内存中分配  
而实际的对象是在存储堆内存中  
 
int i = 5;//直接在栈中分配空间  
Integer i = new Integr(5);//对象是在堆内存中,而i(引用变量)是在栈内存中  
在堆中分配的内存,由java虚拟机的自动垃圾回收器来管理.
因为在堆中分配空间所需的时间远大于从栈中分配存储空间,所以JAVA速度比C 慢
当需要往ArrayList,HashMap中放东西时,像int,double这种基本类型是放不进去的,因为容器都是装object的,这是就需要这些基本类型的外覆类了。Java中每种基本类型都有相应的外覆类。
int 和 Integer 的区别

java 提供两种不同的类型:引用类型(或者封装类型,Warpper)和原始类型(或内置类型,Primitive)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。 
原始类型 封装类 
boolean Boolean 
char Character 
byte Byte 
short Short 
int Integer 
long Long 
float Float 
double Double 
引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的 数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null,而原始类型实例变量的缺省值与它们的类型有关。

from:http://community.csdn.net/Expert/topic/3666/3666081.xml?temp=.9687921 


int 是基本类型,(int)(Math.Random()*100)就是一个数,可以进行加见乘除。 Integer是class ,那么 new Integer(temp)就是一个对象了,可以用到Integer这个class的方法,例如用intvalue()可以返回这个int的值。

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值