java傳引用,java中引用傳遞

本文目錄一覽:

java在函數調用時怎麼「傳int的引用」

[java] view plaincopy

public class TestFun {

public static void testInt(int i){

i=5;

}

public static void main(String[] args) {

int a=0 ;

TestFun.testInt(a);

System.out.println(“a=”+a);

}

}

程序執行結果:a=0 。

(二)對象類型參數:傳引用,方法體內改變形參引用,不會改變實參的引用,但有可能改變實參對象的屬性值。

舉兩個例子:

(1)方法體內改變形參引用,但不會改變實參引用 ,實參值不變。

[java] view plaincopy

public class TestFun2 {

public static void testStr(String str){

str=”hello”;//型參指向字元串 「hello」

}

public static void main(String[] args) {

String s=”1″ ;

TestFun2.testStr(s);

System.out.println(“s=”+s); //實參s引用沒變,值也不變

}

}

執行結果列印:s=1

(2)方法體內,通過引用改變了實際參數對象的內容,注意是「內容」,引用還是不變的。

[java] view plaincopy

import java.util.HashMap;

import java.util.Iterator;

import java.util.Map;

import java.util.Set;

public class Test {

public void a(Map a,String b)

{

a.put(“test”, b);

}

public void b()

{

Map a = new HashMap();

a.put(“test”, “a”);

String b = “b”;

//printMap(a);

a(a,b);

printMap(a);

}

public void printMap(Map a)

{

Set set = a.entrySet();

Iterator it = set.iterator();

while(it.hasNext())

{

Map.Entry e = (Map.Entry)it.next();

System.out.println(“Key:”+e.getKey()+” Value:”+e.getValue());

}

}

public static void main(String avgs[])

{

Test t = new Test();

t.b();

}

}

執行結果,列印:Key:test Value:b 。可見在方法a()內改變了實參的內容。

(3)第二個例子是拿map舉例的,還有經常涉及的是 StringBuffer :

[java] view plaincopy

public class TestFun4 {

public static void testStringBuffer(StringBuffer sb){

sb.append(“java”);//改變了實參的內容

}

public static void main(String[] args) {

StringBuffer sb= new StringBuffer(“my “);

new TestFun4().testStringBuffer(sb);

System.out.println(“sb=”+sb.toString());//內容變化了

}

}

執行結果,列印:sb=my java 。

所以比較參數是String和StringBuffer 的兩個例子就會理解什麼是「改變實參對象內容」了。

總結:

第一:java方法基本數據類型是傳值,對象類型傳引用,這是千真萬確的。

第二:當參數是對象時,無論方法體內進行了何種操作,都不會改變實參對象的引用。

第三:當參數是對象時,只有在方法內部改變了對象的內容時,才會改變實參對象內容。

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’;}

java中繼承的數值傳遞引用

這個題目如下思路與實現

思路:

依照圓和圓柱的描述抽象成Java程序里的對象Cylinder與Circle,這也是Java的特點之一

圓與圓柱的關係:圓柱繼承圓

寫測試類TestCylinder

實現:

1.圓:

class Circle {

private double radius;// 半徑

// 構造方法半徑設為1

public Circle() {

super();

this.radius = 1.0;

}

// 設置半徑

public void setRadius(Double radius) {

this.radius = radius;

}

// 得到半徑

public Double getRadius() {

return radius;

}

}

2.圓柱

class Cylinder extends Circle {

private double length;

public Cylinder() {

super();

this.length = 1.0;

}

public void setLength(double length) {

this.length = length;

}

public double getLength() {

return length;

}

public double findVolume() {

return this.length * super.getRadius() * super.getRadius() * Math.PI;

}

}

3.測試

public class TestCylinder {

public static void main(String[] args) {

Cylinder cy = new Cylinder();//實例化一個圓柱

System.out.println(cy.findVolume());//因為length有默認值1,圓柱的父類圓具有半徑且初始值是1,此處,沒有主動給length和radius賦值,所以findVolume里使用的半徑與高都是1,所以體積是3.141592653589793

cy.setRadius(2.0);

cy.setLength(2.0);

System.out.println(cy.findVolume());//主動給半徑和高設置值,那麼cy的半徑與高的初始值就會被改變,結果就是2*2*2*PI

}

}

運行結果:

3.141592653589793

25.132741228718345

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/185472.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-26 12:19
下一篇 2024-11-26 12:24

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29
  • Java 8 Group By 會影響排序嗎?

    是的,Java 8中的Group By會對排序產生影響。本文將從多個方面探討Group By對排序的影響。 一、Group By的概述 Group By是SQL中的一種常見操作,它…

    編程 2025-04-29

發表回復

登錄後才能評論