Java String作為引數的情況
layout: post
title: Java String作為引數的情況
date: 2015-05-28
categories: blog
tags: [Java,String]
category: Java
description: java中的String作為引數是需要特別的注意.
String是不可以被修改的
一旦String物件建立之後,我們是不能修改他的值的(這裡的修改是指在記憶體的同一位置).我們可以從JDK的String類裡看到
比如substring()方法
public String substring(int beginIndex, int endIndex) {
if (beginIndex < 0) {
throw new StringIndexOutOfBoundsException(beginIndex);
}
if (endIndex > value.length) {
throw new StringIndexOutOfBoundsException(endIndex);
}
int subLen = endIndex - beginIndex;
if (subLen < 0) {
throw new StringIndexOutOfBoundsException(subLen);
}
return ((beginIndex == 0) && (endIndex == value.length)) ? this
: new String(value, beginIndex, subLen);
}
在最後,我們發現他返回的String是重新new的一個物件,而不是在原物件的基礎上修改
基本型別做引數傳的是值,物件傳遞的是相當於引用
傳值是不會導致資料的改變的,但是當傳遞的是引用,在方法中改變了物件的某欄位,會導致方法外部的變數也改變
example:
public class Test {
public int i = 0;
public void chaneg(Test t) {
t.i = 10;
}
public static void main(String[] args) {
Test test = new Test();
System.out.println(test.i);
test.chaneg(test);
System.out.println(test.i);
}
}
output: 0 10
說明在方法內改變變數值導致外部改變
但是對於String當值的改變是,記憶體地址已改變
則相當於下面的example:
public class Test {
public int i = 0;
public void chaneg(Test t) {
t = new Test();//改變記憶體地址
t.i = 10;
}
public static void main(String[] args) {
Test test = new Test();
System.out.println(test.i);
test.chaneg(test);
System.out.println(test.i);
}
}
output: 0 0
也就是說沒有改變外部的值
總結
當在方法中該變數物件的記憶體地址之後,是不會影響外部的值,但是如果只是改變了某欄位的值,外部的值會跟著改變.
相關文章
- String不同定義的情況解析
- 不重啟mysql情況修改引數變數MySql變數
- Java中main方法引數String[ ] args的使用JavaAI
- mybatis sql foreach 引數的傳入的三種情況!!MyBatisSQL
- Java中將方法作為引數傳遞5種方式Java
- 為什麼Java String雜湊乘數為31?Java
- 函式作為引數傳遞函式
- 給一組數,分為兩組,求差最小的情況
- SQL中除數為0處理情況演示SQL
- java查詢資料庫,int型欄位為null的情況Java資料庫Null
- 變數轉化為判斷條件時的各種情況變數
- if 判斷為 false 的 6 種情況False
- axios get請求如果遇到引數有陣列的情況怎麼解決iOS陣列
- spring注入在有常量的情況下使用@AllArgsConstructor報錯Consider defining a bean of type ‘java.lang.String‘ in your cSpringStructIDEBeanJava
- Java程式異常處理的特殊情況Java
- GO語言————6.7 將函式作為引數Go函式
- 利用DataTable將其作為引數傳給SP
- AMD MPSoC PS PCIe作為EP與Host在異常狀態下的工作情況
- Go中slice作為引數傳遞的一些“坑”Go
- Oracle:SYS_REFCURSOR作為函式中的輸出引數Oracle函式
- Golang 切片作為函式引數傳遞的陷阱與解答Golang函式
- laravel中whereIn方法中使用SQL作為引數的途徑LaravelSQL
- 設計模式——把類作為引數的抽象工廠模式設計模式抽象
- 求金字塔數字非負的情況總數
- js中bool值為false的幾種情況JSFalse
- Go語言Slice作為函式引數詳解Go函式
- 可變資料型別不能作為python函式的引數資料型別Python函式
- 什麼情況!華為開源JDK!JDK
- 對 “C語言指標變數作為函式引數” 的個人理解C語言指標變數函式
- Java(三)引數Java
- [20220216]為什麼出現這樣的情況.txt
- Python之在函式中使用列表作為預設引數Python函式
- 關於變數與‘=’賦值的情況出錯變數賦值
- SpringDataJpa列印Sql詳情(含引數)SpringSQL
- Java - 可變引數的使用Java
- Java對比有引數和無引數Java
- [Java基礎]String 為什麼是不可變的?Java
- scala:函式作為值或引數進行傳遞、作為返回值進行返回函式
- java空指標出現的情況:拆箱裝箱Java指標